GeoDjangoのドキュメントではGMapの接続について何も教えていないので、何が起こっているのか分かりません。GeoDjangoにGoogleマップを接続する方法は?
models.py:
from django.contrib.gis.db import models
class Location(models.Model):
name = models.CharField(max_length=100)
coords = models.PointField(srid=4326, blank=True, null=True)
forms.py:そのようなコードは自動的に 'coordsの' のために生成されたadd_location.htmlで
from django.contrib.gis import forms
class LocationForm(forms.ModelForm):
class Meta:
model = Location
fields = ['coords', 'name']
:で
<div id="div_id_coords" class="form-group">
<div class="controls ">
<div id="id_coords_div_map">
<div id="id_coords_map"></div>
<span class="clear_features">
<a href="javascript:geodjango_coords.clearFeatures()">Delete</a>
</span>
<textarea id="id_coords" class="vSerializedField required" cols="150" rows="10" name="coords"></textarea>
<script type="text/javascript">
var map_options = {};
var options = {
geom_name: 'Point',
id: 'id_coords',
map_id: 'id_coords_map',
map_options: map_options,
map_srid: 4326,
name: 'coords'
};
var geodjango_coords = new MapWidget(options);
</script>
</div>
</div>
</div>
私js file私のモデルにマーカーの座標を取得しようとしています:
var mapOptions = {...};
map = new google.maps.Map($('#id_coords_map')[0], mapOptions);
map.addListener('click', function(e){
placeMarker(e.latLng, map);
var position = marker.getPosition();
});
var marker;
function placeMarker(latLng, map) {
marker = new google.maps.Marker({...});
return marker
}
しかし、動作しません。私はクロームコンソール(私はボタンを押したときに、私のフォームに場所を追加します)でエラーが出ますので、それも、座標を取得しに来ていません:
ラインに関連するUncaught ReferenceError: MapWidget is not defined
:
var geodjango_coords = new MapWidget(options);
そして、フォームフィールドのCOORDSで検証エラーとして私が見ることができます -
を「ありませジオメトリ値が」私は何かがGMapの接続が間違っていることを推測しないと(のModelFormの__init__
にself.fields['coords'].widget
経由)COORDSフィールドにあったものをウィジェットチェックし、それターそれがOpenLayersウィジェットであることを明らかにした。
GMapをウィジェットとして取得し、マーカーの座標をインスタンスに保存するにはどうすればよいですか?
P.S.ページ(それはGoogleマップへの接続についてである)のヘッドコンテンツ:HEADに{{form.mediaを}}追加
<script type="text/javascript" charset="UTF-8" src="https://maps.googleapis.com/maps-api-v3/api/js/25/5/intl/ru_ALL/common.js"></script>
<script type="text/javascript" charset="UTF-8" src="https://maps.googleapis.com/maps-api-v3/api/js/25/5/intl/ru_ALL/map.js"></script>
<script type="text/javascript" charset="UTF-8" src="https://maps.googleapis.com/maps-api-v3/api/js/25/5/intl/ru_ALL/util.js"></script>
<script type="text/javascript" charset="UTF-8" src="https://maps.googleapis.com/maps-api-v3/api/js/25/5/intl/ru_ALL/onion.js"></script>
<script type="text/javascript" charset="UTF-8" src="https://maps.googleapis.com/maps-api-v3/api/js/25/5/intl/ru_ALL/stats.js"></script>
<script type="text/javascript" charset="UTF-8" src="https://maps.googleapis.com/maps-api-v3/api/js/25/5/intl/ru_ALL/controls.js"></script>
<script type="text/javascript" charset="UTF-8" src="https://maps.googleapis.com/maps-api-v3/api/js/25/5/intl/ru_ALL/marker.js"></script>
あなたは自分のJSファイルが* Google JSファイルの後に読み込まれていることを100%確信していますか?私がhttps://developers.google.com/maps/documentation/javascript/ :)をチェックすると、MapWidgetはGoogle Mapsのものではないようです。 – ZvL
BODYの底にjqueryスクリプトがありますが、私はHEADにgoogleスクリプトを含めました。私はCOORDSフィールドでGoogle Mapsを見ることができることに気付きたいですが、それはウィジェットではありません。 OpenLayersウィジェットはGoogleマップの下に滞在しているためです。 – Dennis
おそらくそれで、なぜ、私はGMapでクリックするので、検証エラー "ジオメトリ値なし"が得られるのですが、フォームはOpenLayersウィジェットからの値を期待しています...それは私の提案です – Dennis