상당히 복잡하지만 긴 이야기가 짧습니다. 도시의 여러 지점 사이에 경로를 그리려면 OSMNx와 같은 여러 라이브러리를 사용했습니다. 이제 나는 그것을 shp 파일로 변환 할 것이다.Shapely : LineString이있는 쉼표가없는 튜플
경로는 노드의 ID로 가득 찬 목록입니다. 그런 다음이 ID를 사용하여 각 노드의 위도와 경도를 추출합니다.
journey = []
# previous list will contain tuples with coordinates of each node
for node1, node2 in zip(route[:-1], route[1:]):
parcours.append(tuple((G.node[noeud1]['x'], G.node[noeud1]['y']))) # we create a tuple with coordinates of start's node
parcours.append(tuple((G.node[noeud2]['x'], G.node[noeud2]['y']))) # then we make the same for the arrival node
여기에 인쇄 (여행)의 결과의 루프의 끝 :
나는 다음과 같이 루프에 대한 각 노드 쌍 (하나의 시작, 일 도착)의 좌표를 연결하는 튜플을했다[(6.15815, 48.6996136), (6.1629696, 48.7007431), (6.1629696, 48.7007431), [...], (6.1994411, 48.6768434), (6.1994411, 48.6768434), (6.1995322, 48.6767583)]
각 튜플이 올바르게 나타납니다. 나는의 매끈한 유도 선에서 여행을 변환 할 ... 그리고이 반환 때 :
import fiona
schema = {
'geometry': 'Polygon',
"properties": {'id': 123}
}
with fiona.open('test.shp', 'w', 'ESRI Shapefile', schema) as c:
c.write({
'geometry': mapping(trace)
})
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) in() 4 } 5 ----> 6 with fiona.open('test.shp', 'w', 'ESRI Shapefile', schema) as c: 7 c.write({ 8 'geometry': mapping(trace)
/usr/local/lib/python3.5/dist-packages/fiona/init.py in open(path, mode, driver, schema, crs, encoding, layer, vfs, enabled_drivers, crs_wkt) 173 c = Collection(path, mode, crs=crs, driver=driver, schema=this_schema, 174 encoding=encoding, layer=layer, vsi=vsi, archive=archive, --> 175 enabled_drivers=enabled_drivers, crs_wkt=crs_wkt) 176 else: 177 raise ValueError(
/usr/local/lib/python3.5/dist-packages/fiona/collection.py in init(self, path, mode, driver, schema, crs, encoding, layer, vsi, archive, enabled_drivers, crs_wkt, **kwargs) 154 elif self.mode in ('a', 'w'): 155 self.session = WritingSession() --> 156 self.session.start(self, **kwargs) 157 except IOError: 158 self.session = None
fiona/ogrext.pyx in fiona.ogrext.WritingSession.start (fiona/ogrext2.c:16207)()
TypeError: argument of type 'int' is not iterable
: 결과적으로
from shapely.geometry import LineString
final_journey = LineString(journey)
print(final_journey)
LINESTRING (6.15815 48.6996136, 6.1629696 48.7007431, 6.1629696 48.7007431, 6.1630717 48.7002871, [...], 6.1991794 48.677085, 6.1994411 48.6768434, 6.1994411 48.6768434, 6.1995322 48.6767583)
, 나는 피오나를 사용하여 SHP에서 변환 할 수 없습니다 튜플이 위도와 경도 사이에 쉼표없이 변환되는 이유를 이해할 수 없습니다. 또한 몇 가지 중복이 있습니다 (세 번째 줄의 두 번째 좌표는 네 번째 줄의 첫 번째 좌표 등입니다 ...) 미래 shp에 대한 오류의 원인 일 수 있습니다.
미리 감사드립니다.
을보고 무엇 print (final_journey)는 라인의 [Well Known Text] (https://en.wikipedia.org/wiki/Well-known_text) 표현입니다. 이 점에 아무런 문제가 없습니다 (예 : '쉼표가없는 튜플 (tuples in comma)'). 인터프리터에서 모양을 매끄럽게 표시하는 것입니다. – mgc