微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何创建多边形并检查给定的纬度,经度是否在里面

如何解决如何创建多边形并检查给定的纬度,经度是否在里面

我有一组坐标,想从中创建一个多边形,然后,我将输入纬度和经度并检查给定的坐标是在多边形的内部还是外部。

我尝试使用 Shapely 绘制多边形,有些是正确的。我的坐标:

coords = [(48.9276684941938,9.148899187374205),(48.927881447105676,9.148709214807226),(48.928097614085175,9.148527808307),(48.92831656589233,9.148354454524537),(48.92853801299333,9.14818847255271),(48.92876304120666,9.148030296534815),(48.92899058574909,9.147880813070733),(48.929220004856425,9.147737925539758),(48.92945050690533,9.147599646704602),(48.92970963088016,9.147448804345393),(48.929969642221785,9.147302124446165),(48.930230552830835,9.147158909183357),(48.93049212225262,9.147018600375391),(48.931016778198384,9.146744181554437),(48.93154237676336,9.146473988125043),(48.9276684941938,(48.92770214317435,9.14898338362773),(48.92791356880573,9.148794765833149),(48.92812829266924,9.148614547378457),(48.92834590048043,9.14844222176487),(48.928566113985696,9.148277117808037),(48.92878946335235,9.148120067839535),(48.929015676775194,9.147971398151217),(48.92924412032041,9.147829052791057),(48.92947400781438,9.147691074306037),(48.929732441980185,9.147540555874041),(48.92999185500086,9.147394137713535),(48.93025226040877,9.147251128456126),(48.93051341950752,9.147110975575266),(48.931037543721,9.146836738790197),(48.931563000656055,9.146566582017199),9.146566582017199)]

代码

from shapely.geometry import Point,polygon

poly = polygon(coords)
poly

输出

enter image description here

我想将坐标作为输入传递,并返回坐标是否在给定坐标内。

预期输出

enter image description here

解决方法

您没有指定多边形坐标是否有序。从你的例子看来,它们不是。如果没有,您可能希望使用 object.convex_hull 而不是多边形构造函数创建多边形:

coords = [
    (48.9276684941938,9.148899187374205),...
]

poly = MultiPoint(coords).convex_hull

除此之外,您似乎只是缺少使用 object.intersects() 来检查给定点是否在*多边形内:

x = 48.929234
y = 9.147870

Point(x,y).intersects(poly)

返回 True

*对于“内”的共同理解。在技​​术术语中,“内”将排除多边形边界上的点,而“相交”包括它们。如果您不希望边界上的点(例如原始 coords 中的点)返回 True,请将 object.within() 替换为 object.intersects()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。