我想在视图中使用 python 从 PostGIS 数据库中提取多边形几何数据,并将其添加到模板中的传单地图中。最简单的方法似乎是提取数据并使用 Django 视图中的 postgis 函数 ST_AsGeoJSON 将其转换为 GeoJSON,然后将其作为 L.geoJSON(GEOJSON).addTo(map) 函数中的上下文渲染到模板。
这是行不通的。在请求地图页面时,地图现在是空白的,并且似乎无法识别 GeoJSON。我已经能够从视图传递硬编码的多边形并将其添加到地图中,但我的 postgis 数据库中的几何数据根本无效。
这是一个带有硬编码多边形的视图,已成功打印在地图上:
from django.shortcuts import render
def map_view(request, *args, **kwargs):
geo_json={
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"properties": {},
"geometry": {
"type": "Polygon",
"coordinates": [
[
[
-0.10746002197265625,
51.505537109466715
],
[
-0.11466979980468751,
51.498377681772325
],
[
-0.0968170166015625,
51.493568479510415
],
[
-0.09080886840820312,
51.502438390761164
],
[
-0.10746002197265625,
51.505537109466715
]
]
]
}
}
]
}
return render(request ,'map.html', {'geo_json': geo_json})
Run Code Online (Sandbox Code Playgroud)
地图模板如下所示:
<!DOCTYPE html>
<html>
<head> …Run Code Online (Sandbox Code Playgroud) 请参阅丝网印刷。
我在 Postgis 中运行了一个空间查询,以返回地图上的点所在的选区(区域)。该查询使用ST_within该点位于多边形内的函数。
正如您从打印中看到的,该点实际上并不在 York Outer 的多边形区域“内”,尽管从技术上讲您可能会说它在其中“内部”,或者至少 Postgis 是这么认为的。重点实际上在于约克中心。
我确信 Postgis 实际上会返回两者,但由于我只从游标中获取第一条记录,这就是我所看到的。
一个点一次只能位于一个选区,并且此查询返回了错误的选区,或者更确切地说,我向数据库提出了错误的问题。
我应该使用哪个函数来确保我始终返回正确的区域,该区域可能具有中空内部或形状奇怪?
谢谢
菲尔