2

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は他のことも行いますか?

最後に、これは私のアプリケーションのコーディングの問題である可能性があります。最小限のテスト例に取り組み、投稿します...

4

2 に答える 2

1

OK、編集投稿の下にも示されているように、主な質問に対する答えが見つかりました。

今後の参考のために、Google 球面図法を Spatialite データベースに追加する方法を次に示します (これは既に空間的に有効になっている必要があります)。

1) 次の内容のテキスト ファイルを作成します。

始める;

Spatial_ref_sys (srid, auth_name, auth_srid, ref_sys_name, proj4text) 値 (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');

専念;

2) ファイルをinit_EPSG900913.sqlのような名前で、spatialiteデータベースを保持するディレクトリに保存します。

3) 次のコマンドを発行して、データベースで SQL ステートメントを実行します。

Spatialite some_database.sqlite < init_EPSG900913.sql

別の方法- django-script 内または "python manage.py shell" 内から:

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()

これら 2 つの方法のいずれかを使用すると、データベースに Google マップ参照システムが登録されます。

于 2012-11-05T20:20:39.093 に答える
1

EPSG 定義の欠落は、問題の一部にすぎないことが判明しました。もう 1 つの部分は、アプリが bitnami ubuntu django スタックで実行されているという事実に関連していました。

bitnami ubuntu django スタックの geodjango ドキュメントのインストール ガイドに従うと、すべての追加の python パッケージと空間ライブラリがシステム フォルダー /user/local/..something.. にインストールされ、自己完結型の bitnami 環境にはインストールされません。

今後の参考のために、追加の python パッケージをインストールする前に、必ず次のステートメントを発行してください。

$ sudo su
$ /opt/bitnami/use_djangostack

その後、パッケージが bitnami 環境にインストールされます。

また、./configure コマンドを使用してさまざまな空間ライブラリのビルドを構成する場合、共有ファイルを bitnami 環境に配置するためのオプションを追加する必要があります。私は通常、次のようなものを使用しました:

$ ./configure --prefix=/opt/bitnami/common

geodjango ドキュメントで説明されているように、追加の引数を渡す必要がある場合がありますが、これらの引数で指定されたパスは、/opt/bitnami/... の適切なサブディレクトリを指すように変更する必要があります。

于 2012-11-06T23:03:40.597 に答える