from functools import cmp_to_key
from shapely import from_wkt
from shapely.geometry import LineString
# 定义车道线(假设为 LineString 对象)
lines_dict = {
"4": "LINESTRING Z(116.222517 40.147647 0, 116.222515 40.147649 0, 116.222455 40.147705 0, 116.222418 40.147741 0, 116.222252 40.1479 0)",
"3": "LINESTRING Z(116.222472 40.14762 0, 116.222375 40.147716 0, 116.22227 40.14782 0, 116.222212 40.147877 0)",
"-1": "LINESTRING Z(116.22238 40.147565 0, 116.222283 40.147661 0, 116.222121 40.147823 0)",
"2": "LINESTRING Z(116.222436 40.147599 0, 116.222339 40.147694 0, 116.222177 40.147856 0)",
"1": "LINESTRING Z(116.222401 40.147577 0, 116.222304 40.147674 0, 116.222141 40.147835 0)",
"5": "LINESTRING Z(116.222558 40.147672 0, 116.222398 40.147818 0, 116.222287 40.147922 0)"
}
def cross_product(vec1, vec2):
return vec1[0] * vec2[1] - vec1[1] * vec2[0]
def cross_sort(item1, item2):
line1, line2 = item1[1], item2[1]
line1_coords = line1.coords
line2_coords = line2.coords
start1, end1 = line1_coords[0], line1_coords[-1]
start2, end2 = line2_coords[0], line2_coords[-1]
vector1 = (end1[0] - start1[0], end1[1] - start1[1])
vector2_start = (start2[0] - start1[0], start2[1] - start1[1])
vector2_end = (end2[0] - start1[0], end2[1] - start1[1])
cross_start = vector1[0] * vector2_start[1] - vector1[1] * vector2_start[0]
cross_end = vector1[0] * vector2_end[1] - vector1[1] * vector2_end[0]
# # 判断位置关系
# if cross_start > 0 and cross_end > 0:
# return "left"
# elif cross_start < 0 and cross_end < 0:
# return "right"
# elif cross_start == 0 and cross_end == 0:
# return "collinear"
# else:
# return "intersecting or mixed"
if cross_start > 0 and cross_end > 0:
return 1
elif cross_start < 0 and cross_end < 0:
return -1
def lines_sorted(lines_dict):
if lines_dict and len(lines_dict) > 1:
sorted_items = sorted(lines_dict.items(), key=cmp_to_key(cross_sort))
for sorted_item in sorted_items:
print(sorted_item)
if __name__ == '__main__':
d = {}
for k, v in lines_dict.items():
d[k] = from_wkt(v)
print(d)
lines_sorted(d)
lines_sorted
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 最近项目组想推增量测试覆盖度统计,让我先行调研相关工具。后来在github 上找到这个diff_cover工具,基...
- 项目背景 最近在做“夏亚名台词”系列的文章,因此搜集了不少数据。在搜集数据的过程中发现,网上资源虽然非常丰富,但是...
- 版本记录 前言 quartz是一个通用的术语,用于描述在iOS和MAC OS X 中整个媒体层用到的多种技术 包括...
- Come on, you're dying! 拜托 你要死了 You have to return to your...