私は AngularJS を初めて使用します (そして JavaScript には非常に慣れていません)。この一見単純なアクションを機能させることができません。
次のように、Django Rest Framework バックエンドからの GeoJSON 応答があります (関連するビットのみ)。
{
"type": "FeatureCollection",
"features": [
{
"id": 12,
"type": "Feature",
"geometry": {
"id": 11,
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
-1.54392242410118,
53.797843696134585
]
直接または angular-leaflet-directive を介して Leaflet に渡す座標を取得して、中心にマーカーがある単純なマップを表示したいと考えています。コンソールで $scope の内容を表示するように window.MY_SCOPE を設定し、data.features[0].geometry.geometry['coordinates'] を使用して座標にアクセスできます。これはブラウザにテキストとして表示されますが、'埋め込まれた Leaflet スクリプトにそれを渡すようには見えません (変数としては非常に扱いにくいです)。配列として、または外部スクリプトの変数のペアとして、値を抽出する方法を考え出しました。ループを使用することが答えのようですが、クエリは 1 つのレコードのみを返し、ループ (または 2 つ) を取得して座標を返すことはできません。私はしばらくこれに固執しており、状況に一致する例を見つけることができません。バックエンドを制御できるので、必要に応じて出力を変更できます。誰かがこれについて何か洞察を持っていますか?
EDIT:@ iH8の回答によると、最初はネストされたジオメトリがあり、これを修正したため、有効なGeoJSONを返していませんが、GeoJSONデータをプロパティとして他の情報を配信しようとしているためです。検証しません。
DRF 側の答えは、django-rest-framework-gisを使用してデータ応答に GeoJSON を含めるようにシリアライザーをネストし、GeoFeatureModelSerializer を使用して両方のシリアライザーを使用することです。これにより、以下のネストされた出力が作成されます。プロパティ情報を持つモデルを GeoModelSerializer に変更すると、ジオ コンポーネントがフィーチャとして表示され、その関連データがプロパティとして表示されますが、ネストされたモデルは表示されません。少し時間をかけて有効な GeoJSON オブジェクトに変換しようとしますが、最終的にはページ データに対して複数の要求を行うことができます。これは最適ではありませんが、最も簡単な解決策になる可能性があります。
更新: 2 週間頭を悩ませた後、値を定義し、django-geojson のシリアライザーを使用して、クエリセットから有効な geojson を取得することができました。きれいではありませんが、機能します。ただし、角度コントローラーで座標を抽出しようとしても、まだ機能しません。
コードを次のように要約しました。
data = {"crs": {"type": "link", "properties": {"href": "http://spatialreference.org/ref/epsg/4326/", "type": "proj4"}}, "type": "FeatureCollection", "features": [{"geometry": {"type": "Point", "coordinates": [-1.54392242410118, 53.797843696134585]}, "type": "Feature", "properties": {"market_manager__mgt_name": "Leeds Markets", "name": "Leeds Artsmix @ Albion Place", "url": "http://www.artsmix.co.uk/", "contact_email": "marketsmanager@artsmix.co.uk", "schedule__rrule": null, "id": 12}}]};
var coords = data.features[0].geometry.coordinates;
var lat = coords[1];
var lng = coords[0];
これは、この Plunk に示すように正しく返されます: http://plnkr.co/edit/xunAg5?p=preview
ただし、「未定義のプロパティ '0' を読み取ることができません」というエラーで常に角度コントローラーで失敗します。「データ」オブジェクトは、$scope.data と同様にコンソールでクエリできます。data.features[0] が未定義であることを示唆する同様の質問がいくつかありますが、コンソールと ng-inspector でどのように正しく表示されるかわかりません。