我试图在我的管理界面中包含一个谷歌地图小部件,在 Linux 系统上使用这个片段(目前在 VMWare Player 的 Bitnami django 堆栈上本地运行)。
地图呈现,但我的数据库中的点特征(实际上是任何特征)没有显示在地图上,当尝试通过地图界面注册点时,我收到一个错误:
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 中。我检查了/usr/local/share/gdal/gcs.csv文件,该文件似乎没有 900913 的条目(我搜索了其他版本的 gcs.csv,但似乎没有一个包含 900913)。我认为这是导致错误的原因。但是,同一目录中的cubewerx_extra.wkt确实有一个 900913 的 WKT 条目。
我的问题是:如何让add_srs_entry找到正确的 SRS 表示以便将其添加到我的数据库中?或者是否有解决方法,例如以某种方式转换 WKT 表示并将其手动插入 gcs.csv?
我很感激任何帮助!
编辑: 我找到了一种将 EPSG 900913 手动插入到空间数据库中的方法。该解决方案的灵感来自 http://trac.osgeo.org/openlayers/wiki/SphericalMercator 上的 sql 语句(对不起,我没有足够的声誉来发布更多链接)并使用原始 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 是否也做其他事情?
最后,这可能是我的应用程序中的一个编码问题,我将处理一个最小的测试示例并将其发布......