Python Shapely 似乎将错误的点分配给了多边形
Python Shapely seems to assign wrong point to polygon
我正在使用 shapely 将坐标映射到 geojson 文件,但映射似乎是错误的。在下图中(来自 geojson.io),您可以看到多边形和我想要映射的黄色点。在这种情况下,shapely 告诉我该点在多边形内部,但如您所见,这是错误的。
我的代码:
import json
from shapely.geometry import shape, Point
upzs = open('upzs.geojson', encoding='utf-8')
upzs = json.load(upzs)
point = Point(-74.09008026123047,4.719461869021348) # longitude, latitude
for feature in upzs['features']:
polygon = shape(feature['geometry'])
if point.within(polygon) == True:
print(feature['properties']['NOMBRE'])
if polygon.contains(point):
print(feature['properties']['NOMBRE'])
我的输出:
EL RINCON
EL RINCON
('EL RINCON'是错误多边形的名称)
如果你想测试它
,你可以从这个 link 下载 geojson 文件
您确定您发布的图片真的是 GeoJson 文件中的 EL RINCON 吗?
当我在 jupyter notebook 上 运行 下面时,我得到了一个非常不同的形状。
import json
from shapely.geometry import shape, Point
upzs = open('pensionadosactivosupz.geojson', encoding='utf-8')
upzs = json.load(upzs)
point = Point(-74.09008026123047,4.719461869021348) # longitude, latitude
for feature in upzs['features']:
polygon = shape(feature['geometry'])
if point.within(polygon) == True:
print(feature['properties']['NOMBRE'])
if polygon.contains(point):
print(feature['properties']['NOMBRE'])
display(polygon)
另外,如果我映射它(使用其他包,都可以在 pip 上获得),该点将包含在多边形中。找到底部的白色圆圈。
import matplotlib.pyplot as plt
import mplleaflet
import geopandas as gpd
from shapely.geometry import shape, Point
p = Point(-74.09008026123047,4.719461869021348)
x = gpd.read_file("pensionadosactivosupz.geojson")
fig, ax = plt.subplots()
x[x.NOMBRE=="EL RINCON"].plot(ax=ax)
ax.scatter([-74.09008026123047], [4.719461869021348], c="white")
mplleaflet.show()
我不确定,也许你显示的多边形有误?
这是我的代码
import json
from shapely.geometry import shape, Point
import folium
upzs = open('upzs.geojson', encoding='utf-8')
upzs = json.load(upzs)
point = Point(-74.09008026123047,4.719461869021348) # longitude, latitude
for feature in upzs['features']:
polygon = shape(feature['geometry'])
if point.within(polygon) == True:
print(feature['properties']['NOMBRE'])
if polygon.contains(point):
print(feature['properties']['NOMBRE'])
break
m=folium.Map(location=(5,5),zoom_start=6)
folium.Marker([4.719461869021348,-74.09008026123047], popup=folium.Popup('hello',max_width=1000),
tooltip='click here').add_to(m)
folium.GeoJson(polygon).add_to(m)
m
我正在使用 shapely 将坐标映射到 geojson 文件,但映射似乎是错误的。在下图中(来自 geojson.io),您可以看到多边形和我想要映射的黄色点。在这种情况下,shapely 告诉我该点在多边形内部,但如您所见,这是错误的。
我的代码:
import json
from shapely.geometry import shape, Point
upzs = open('upzs.geojson', encoding='utf-8')
upzs = json.load(upzs)
point = Point(-74.09008026123047,4.719461869021348) # longitude, latitude
for feature in upzs['features']:
polygon = shape(feature['geometry'])
if point.within(polygon) == True:
print(feature['properties']['NOMBRE'])
if polygon.contains(point):
print(feature['properties']['NOMBRE'])
我的输出:
EL RINCON
EL RINCON
('EL RINCON'是错误多边形的名称)
如果你想测试它
,你可以从这个 link 下载 geojson 文件您确定您发布的图片真的是 GeoJson 文件中的 EL RINCON 吗?
当我在 jupyter notebook 上 运行 下面时,我得到了一个非常不同的形状。
import json
from shapely.geometry import shape, Point
upzs = open('pensionadosactivosupz.geojson', encoding='utf-8')
upzs = json.load(upzs)
point = Point(-74.09008026123047,4.719461869021348) # longitude, latitude
for feature in upzs['features']:
polygon = shape(feature['geometry'])
if point.within(polygon) == True:
print(feature['properties']['NOMBRE'])
if polygon.contains(point):
print(feature['properties']['NOMBRE'])
display(polygon)
另外,如果我映射它(使用其他包,都可以在 pip 上获得),该点将包含在多边形中。找到底部的白色圆圈。
import matplotlib.pyplot as plt
import mplleaflet
import geopandas as gpd
from shapely.geometry import shape, Point
p = Point(-74.09008026123047,4.719461869021348)
x = gpd.read_file("pensionadosactivosupz.geojson")
fig, ax = plt.subplots()
x[x.NOMBRE=="EL RINCON"].plot(ax=ax)
ax.scatter([-74.09008026123047], [4.719461869021348], c="white")
mplleaflet.show()
我不确定,也许你显示的多边形有误?
这是我的代码
import json
from shapely.geometry import shape, Point
import folium
upzs = open('upzs.geojson', encoding='utf-8')
upzs = json.load(upzs)
point = Point(-74.09008026123047,4.719461869021348) # longitude, latitude
for feature in upzs['features']:
polygon = shape(feature['geometry'])
if point.within(polygon) == True:
print(feature['properties']['NOMBRE'])
if polygon.contains(point):
print(feature['properties']['NOMBRE'])
break
m=folium.Map(location=(5,5),zoom_start=6)
folium.Marker([4.719461869021348,-74.09008026123047], popup=folium.Popup('hello',max_width=1000),
tooltip='click here').add_to(m)
folium.GeoJson(polygon).add_to(m)
m