我正在用geodjango和postgis编写一个基于地理的应用程序。我编写了模型,并从管理界面手工填充了前几个点。一切都很好,我甚至可以根据最近的点进行搜索。因此,模型和数据库都工作得很好。现在,我正在尝试从脚本批量填充数据库。根据我在这里找到的答案,我首先填充经度和纬度列,然后执行
engine.execute("UPDATE listings_listing SET location = ST_SetSRID(ST_MakePoint(longitude,latitude), 4326)")来自python脚本。查询执行时没有异常,数据库中似乎填满了适当的值。这里有几个例子
longitude, latitude, location
-55.7385809,-34.7413717,"0101000020E6100000A279A5D189DE4BC008D79244E55E41C0"
-56.1645314,-34.9011127,"0101000020E610000022156B5D0F154CC0504134A9577341C0"
-56.4670779,-30.4264621,"0101000020E610000099976835C93B4CC0C57BC49E2C6D3EC0"
-55.760207,-34.774156,"0101000020E61000005B9885764EE14BC04700378B176341C0"
-56.2553815,-34.7901883,"0101000020E610000070404B57B0204CC04617E5E3246541C0"
-55.760336,-34.773944,"0101000020E610000059FCA6B052E14BC0BC77D498106341C0"
-57.0544726,-30.7552116,"0101000020E610000098C349F5F8864CC0518F238C55C13EC0"
-56.4739006,-30.4097107,"0101000020E610000003475DC6A83C4CC03F52E9CCE2683EC0"现在,当我尝试通过最近的点进行第一次搜索时,我得到了
GEOS_ERROR: ParseException: Unknown WKB type 337从django的日志中
Error encountered checking Geometry returned from GEOS C function "GEOSWKBReader_read_r".我在谷歌上搜索了这个错误,但什么都没有。我检查了经度和纬度中可能的空值,但它们都很好。我怀疑我漏掉了一步。有人能给我指个方向吗?
发布于 2020-06-07 22:16:14
我找到了解决方案。问题出在大熊猫的堆积。如果您使用带有参数if_exists='replace'的pandas的方法.to_sql(),那么pandas将删除现有的表并完全替换它,从而破坏每个模式。因此,在填充几何类型列之前,必须以这种方式重新构建几何列
ALTER TABLE listings_listing ADD COLUMN location geometry(Point, 4326); 然后
UPDATE listings_listing SET location = ST_SetSRID(ST_MakePoint(longitude, latitude), 4326)现在一切都很好了!
https://stackoverflow.com/questions/62245709
复制相似问题