Linuxシステム(現在、VMWarePlayerのBitnamidjangoスタックでローカルに実行されている)でこのスニペットを使用して、管理インターフェイスにGoogleマップウィジェットを含めようとしています。
マップはレンダリングされますが、データベース内のポイントフィーチャ(実際にはすべてのフィーチャ)がマップに表示されません。マップインターフェイスを介してポイントを登録しようとすると、次のエラーが発生します。
An error occurred when transforming the geometry to the SRID of the geometry form field.
geodjangoのドキュメントから、 spatialite / sqliteデータベースを初期化するときにGoogleの空間参照系が含まれていないことに気付きました。解決策は、SRSを追加するために次のコマンドを発行することです。
$ python manage shell
>>> from django.contrib.gis.utils import add_srs_entry
>>> add_srs_entry(900913)
ただし、プロジェクトディレクトリからこれを行うと、次のようになります。
ERROR 6: EPSG PCS/GCS code 900913 not found in EPSG support files. Is this a valid
EPSG coordinate system?
GDAL、GEOS、PROJ4がインストールされていることを確認し、環境変数GDAL_DATAとPROJ_LIBを.profileに追加しました。900913のエントリがないように見える/usr/local/share/gdal/gcs.csvファイルを確認しました(他のバージョンのgcs.csvをグーグルで検索しましたが、900913が含まれていないようです)。これがエラーの原因だと思います。ただし、同じディレクトリ内のcubewerx_extra.wktには、900913のWKTエントリがあります。
私の質問は次のとおりです。データベースに追加するために、add_srs_entryに適切なSRS表現を見つけさせるにはどうすればよいですか。または、回避策はありますか?たとえば、WKT表現を変換してgcs.csvに手動で挿入するなどの回避策はありますか?
助けてくれてありがとう!
編集: EPSG900913をspatialiteデータベースに手動で挿入する方法を見つけました。このソリューションは、http:// trac.osgeo.org/openlayers/wiki/SphericalMercatorにあるsql-statement(申し訳ありませんが、リンクを追加するのに十分な評判がありません)に触発され、生のsqlを使用してデータベースバックエンドに発行されます。 (https://docs.djangoproject.com/en/dev/topics/db/sql/#executing-custom-sql-directlyのドキュメントで説明されているように):
from django.db import connection, transaction
cursor = connection.cursor()
sql = "INSERT into spatial_ref_sys (srid, auth_name, auth_srid, ref_sys_name, proj4text) values (900913 ,'EPSG',900913,'Google Maps Global Mercator','+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs');"
cursor.execute(sql)
transaction.commit_unless_managed()
エントリがspatial_ref_sysテーブルにあることを確認しました。しかし、管理インターフェースにポイントを追加しようとすると、同じエラーが発生します。ポイントを地図に追加できますが、機能を保存しようとすると、次のエラーが発生します。
An error occurred when transforming the geometry to the SRID of the geometry form field.
上記のSQLステートメントは正しいですか?それで十分ですか、それともadd_srs_entryは他のことも行いますか?
最後に、これは私のアプリケーションのコーディングの問題である可能性があります。最小限のテスト例に取り組み、投稿します...