【发布时间】:2020-06-09 20:51:30
【问题描述】:
我正在转换我编写的一个小项目,以在某个点的半径内找到形状文件的重叠边界。这个原始项目是我使用 Shapely 和 GeoPandas 编写的模型项目,为了使其更适合生产,我将其全部转换为 GeoDjango。
对于这个程序来说,有一件事很重要,那就是在地图上创建一个圆的等距投影。我能够使用 pyproj 和 functools 对形状匀称的对象做到这一点。
让大家知道这个解决方案是在 stackoverflow 上找到的,不是我原来的解决方案。
from shapely import geometry
from functools import partial
def createGeoCircle(lat, lng, mi):
proj_wgs84 = pyproj.Proj(init='epsg:4326')
aeqd_proj = '+proj=aeqd +lat_0={lat} +lon_0={lng} +x_0=0 +y_0=0'
project = partial(
pyproj.transform,
pyproj.Proj(aeqd_proj.format(lat=lat, lng=lng)),
proj_wgs84)
buf = geometry.Point(0, 0).buffer(mi * 1.60934 * 1000)
circle = transform(project, buf)
return circle
我尝试再次使用此解决方案并从 shapely 对象创建 geoDjango MultiPolygon 对象,但它导致放置和形状不正确。
这是我用来投射来自上述函数的匀称物体的代码。
shape_model(geometry=geos.MultiPolygon(geos.GEOSGeometry(createGeoCircle(41.378397, -81.2446768, 1).wkt)), state="CircleTest").save()
这是 Django Admin 中的输出。这张图片放大显示形状,但位置在南极洲的中部。给出的坐标是为了显示在俄亥俄州。
为了澄清一些事情,我的模型如下:
class shape_model(geo_models.Model):
state = geo_models.CharField('State Territory ID', max_length=80)
aFactor = geo_models.FloatField()
bFactor = geo_models.FloatField()
geometry = geo_models.MultiPolygonField(srid=4326)
我可以通过简单地使用 geodjango 点和缓冲区来获得正确的位置,但它显示为椭圆形,因为它不是等距的。如果有人有任何建议或提示,我将不胜感激!
【问题讨论】:
标签: python django gis postgis geodjango