- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有多个 shapefile (.shp) 及其要显示在 Leaflet map 上的辅助文件。 shapefile 使用不同的坐标引用系统 (CRS),我很难掌握在 map 上显示事物的最直接和可靠的方式。在 geodjango tutorial , DataSource 用于加载一个shapefile,然后对其进行操作。然而,在他们的例子中,他们只检索单个特征的几何,而不是整个 shapefile。我用过 PyShp我可以使用以下内容显示 map :
sf = shapefile.Reader(filename)
shapes = sf.shapes()
geojson = shapes.__geo_interface__
geojson = json.dumps(geojson)
但是,当 CRS 不是 WGS84 时,这将失败,并且我不知道如何转换它。
最佳答案
没有使用 Django 的 DataSource
读取任何 shapefile 的直接方法。然后将其翻译为 EPSG:4326 (aka WGS84)
,因此我们需要一步一步地创建并解决我们遇到的问题。
让我们开始这个过程:
.shp
的列表您需要读入的文件路径。它应该如下所示:SHP_FILE_PATHS = [
'full/path/to/shapefile_0.shp',
'full/path/to/shapefile_1.shp',
...
'full/path/to/shapefile_n.shp'
]
DataSource
将 shapefile 读入一个对象。该信息存储在对象的 Layers
中(代表一个多层 shapefile)知道他们的 srs
作为 SpatialReference
. 这很重要,因为我们稍后会将几何转换为 WGS84
以便在 map 上显示。 get_geoms()
提取 OGRGeometry
列表的方法srs
有意识的对象。json
方法:Returns a string representation of this geometry in JSON format:
>>> OGRGeometry('POINT(1 2)').json
'{ "type": "Point", "coordinates": [ 1.000000, 2.000000 ] }'
FeatureCollection
的解决方案的一半输入将显示在 map 上的 geojson。 FeatureCollection
geojson 有一个非常特殊的格式,因此我们将创建基础并按程序填充它:feature_collection = {
'type': 'FeatureCollection',
'crs': {
'type': 'name',
'properties': {'name': 'EPSG:4326'}
},
'features': []
}
features
列出提取的几何图形,格式如下:{
'type': 'Feature',
'geometry': {
'type': Geometry_String,
'coordinates': coord_list
},
'properties': {
'name': feature_name_string
}
}
for shp_i, shp_path in enumerate(SHP_FILE_PATHS):
ds = DataSource(shp_path)
for n in range(ds.layer_count):
layer = ds[n]
# Transform the coordinates to epsg:4326
features = map(lambda geom: geom.transform(4326, clone=True), layer.get_geoms())
for feature_i, feature in enumerate(features):
feature_collection['features'].append(
{
'type': 'Feature',
'geometry': json.loads(feature.json),
'properties': {
'name': f'shapefile_{shp_i}_feature_{feature_i}'
}
}
)
现在
feature_collection
dict 将包含转换为
epsg:4326
的提取特征集合您可以创建一个 json 表单(例如
json.dump(feature_collection)
)
关于python - Geodjango:如何加载 .shp 文件并使用正确的 CRS 转换为 geojson?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62466883/
我已经按照 geodjango 安装(windows XP)和教程进行了完善我正在运行 Django 1.2当我进入 syncdb 并运行时,我收到以下信息。 raise Improperly
我试图让 GeoDjango 在 ubuntu 上运行并且遇到了 GDAL 的问题。 我已经下载并安装了 GDAL 没有问题。 我必须将以下行添加到我的项目设置中: GDAL_LIBRARY_PATH
我的问题与 this 几乎相同.但是它很旧,感觉它一定是一个相当普遍的场景,可能有更好的解决方案。 我有一个类似的模型: class Person(models.Model): locatio
在我的模型中,我通过以下方式定义了一个多边形字段 polygon = models.PolygonField(srid=4326, geography=True, null=True, blank=T
如果可以的话: >>> from django.contrib.gis.geos import GEOSGeometry >>> from django.contrib.gis.geos import
我有以下(简化的)模型: class Zone(gismodels.Model): name = gismodels.CharField() poly = gismodels.Poly
我只是在学习 geo-django。我可以从一个点找出所有地方的距离。但是当我使用 .values带注释的方法 distance领域,我得到 TypeError: Object of type 'Di
首先我需要说这是我的第一个 GeoDjango 任务 - 所以如果有一些“RTF”行请告诉我。 我有两个 Django 模型: 设施模型。对于 code1 和 code2 的组合,不同位置可以存在几个
我目前正在构建我的第一个基于 Django 的应用程序,该应用程序正在进行中到目前为止还算不错。目标之一是允许用户发帖信息(文本、图片、视频)以及应用程序能够自动检测他们发布此信息的位置(即从浏览器中
我的 django 项目中有一个表单和一个表单集。该表单有一个带有点几何图形的输入。所以我在那里输入了看起来像这样的内容: 39.237103, 25.667217 当用户发送表单时,我想分割此输入并
我正在使用 postgis 和 geodjango,并且有很多区域几何图形作为多边形字段,其中许多似乎都有孔,有什么方法可以用来关闭这些孔并保留外部边界? 谢谢 最佳答案 documentation州
我正在尝试使用 GeoDjango 在 Python 中计算一组点上的簇。 问题:给定一组点,输出一组这些点的簇。(我可以提前指定集群数量/集群大小/距离以简化) 有几个solutions在网络上进行
我正在尝试使用 Leaflet 在弹出窗口中显示用户名。现在,我只能将外键 id/pk 作为数字返回,但我想在弹出窗口中显示用户的真实姓名。 (模型中的名称字段在弹出窗口中正确显示) 这是一个简单的模
我已经使用 PostGIS 后端创建了一个 Django 项目,据我所知,这一切似乎都很好。我现在在这个项目中创建了一个应用程序,如下所示: from django.contrib.gis.db im
我的 Profile 模型有这个字段: location = models.PointField(geography=True, dim=2, srid=4326) 我想使用 GeoDjango 计算
我有一个 Django 应用程序,在我安装 GeoDjango 之前它运行良好。我正在使用 Python 2.7.13(通过 mac 端口安装)、Django 1.10.4 运行 MacOS Sier
我想使用 GeoDjango 进行基本的位置搜索。具体来说,我想给搜索功能一个邮政编码/城市/县,并找到 5mi、10mi、20mi 等以内的所有邮政编码/城市/县。我在文档中找到了以下段落: Usi
我正在尝试根据地理位置的接近程度来检索一些帖子。 正如您在代码中看到的那样,我正在使用 GeoDjango 并且代码是在 View 中执行的。 问题是距离过滤器似乎被完全忽略了。 当我检查查询集上的距
我已经使用 postgis 实现了 GeoDjango。 这是我的模型: ... geometria = models.PolygonField(srid=4326, null=True)
我想知道是否有办法知道 OSMWidget 坐标何时更改,我假装在经度和纬度字段上反射(reflect)此更改。我有以下表格: from django.contrib.gis import forms
我是一名优秀的程序员,十分优秀!