PostGIS에서 무향 그래프를 채우는 방법?


9

이 질문은 웹을 잠시 동안 검색했지만 아직 식별하지 못한 리소스와 관련이 있습니다.

프로젝트에서 나는 현재 작업 중입니다. 사무실, 복도, 계단, 리프트 및 건물 사이의 경로를 나타내는 그래프에서 최단 경로 알고리즘을 실행해야합니다.

프레젠테이션 레이어의 경우 MapServer와 함께 Python 스크립팅을 사용하려고 생각했지만 이제는 OpenEV에서 생성 된 (GIS 파일을 a) postGIS db에서 그래프를 작성하여 가장자리를 쉽게 추가하고 제거하는 방법에 대해 더 많이 생각하고 있습니다. 나중에 포인트에 대한 무게 또는 정보.

파이썬에는 그래프를 다루는 networkX라는 모듈이 있는데,이 문제가 stackexchange 에서 제기되었지만 , 내가 만들려고하는 그래프는 digraph가 아니라 방향성없는 그래프입니다.

업데이트 : 5 일 전 Ben Reilly의 utilitynetwork가 networkX 프로젝트에 추가되었습니다. Utilitynetwork는 shapefile 기능에서 직접 그래프를 작성합니다.
postGIS 데이터베이스에서 기능을 읽는 비슷한 접근 방식에 대한 질문은 여전히 ​​열려 있습니다.


pgRouting을 사용하고 싶지 않습니까?
underdark

pgRouting을 사용하지만 구현하려는 알고리즘은 양방향 별이며 기성품 옵션이 아닙니다.
user39901230

답변:


5

NetworkX에는 방향 그래프를 무 방향 그래프로 변환하는 방법이 있습니다 .

또한 shapefile (또는 shapefile 디렉토리)을 읽는 코드 는 실제로 방향 그래프를 출력 할 필요가 없습니다. 즉, 당시에 필요한 것입니다. 나는 시도하지 않았지만 한 줄을 바꾸었다.

net = nx.DiGraph()

... 트릭을 할 수도 있습니다.

NetworkX는 1.4 ( feature ) 에서 OGR을 사용하여 즉시 모양 파일 읽기를 지원하는 것처럼 보입니다 .


혼란을 드려 죄송합니다. 내가 실제로하려는 것은 shp2pgsql을 사용하여 shapefile을 postGIS 데이터베이스로 변환 한 다음 postGIS 데이터베이스에서 networkX 그래프로 가져 오는 것입니다.
user39901230

고마워 벤. 방금 5 일 전에 티켓을 닫았고 코드가 networkX 프로젝트에 추가되었습니다. postGIS 데이터베이스의 기능을 사용하여 동일한 작업을 수행 할 수 있는지 확인하는 것이 흥미로 웠지만 크리스마스 휴가 동안에는 그 점을 살펴볼 것입니다.
user39901230

networkx에 모듈이 포함되어 있지만 아직 v1.4를 출시하지 않았으므로 utilitynetwork 사용에 대한 샘플을 제공 할 수 있습니다. 지금까지 testnetworkload와 여기에있는 샘플을 통해 스키밍했습니다 : gis.stackexchange.com/questions/210/alternatives-to-pgrouting/…
user39901230

이 작업에는 여전히 약간의 작업이 있으므로 pypi에 넣지 않은 이유입니다. 지금 위키를 공개했습니다. 최고의 작업 샘플이 포함되어야합니다 : bitbucket.org/gallipoli/utilitynetwork/wiki/Home
bwreilly

최종 학사 과정 프로젝트에 이것을 포함시킬 계획인데, 저도 기여할 수 있습니까?
user39901230


2

다른 프레임 워크를 사용하는 데 얼마나 관심이 있는지 또는 이미 해결 한 경우 Geodjango 프로젝트는 PostGIS 바인딩이 설치된 postgres를 포함하여 다양한 GIS 지원 데이터베이스를 위해 GIS 데이터 모델에 멋진 ORM 기능을 추가합니다. .

Geodjango 링크는 다음과 같습니다 : http://docs.djangoproject.com/en/dev/ref/contrib/gis/install/#overview

Django는 파이썬을위한 웹 프레임 워크이며 geodjango는 백엔드 웹 개발을 위해 GIS 데이터를 편집하고 표시하려고했지만 직접 OGR 파이썬 바인딩보다 훨씬 더 직관적이고 강력한 클래스 세트를 제공합니다. 예를 들어 생성자에서 wkbLineString 상수를 사용하여 ogr.Geometry 클래스를 만드는 대신 django.contrib.gis.geos.linestring.LineString 클래스를 직접 만들 수 있습니다.

geodjango 학습서에서 : http://docs.djangoproject.com/en/dev/ref/contrib/gis/tutorial/

Postgres 데이터베이스에서 읽기 / 쓰기를 구성하는 데 필요한 단계는 다른 장고 파이썬 모델을 사용하는 것만 큼 간단합니다. 두통은 지리 공간 데이터베이스를 설정하는 것입니다. 따라서 postgres 데이터베이스에 데이터를로드하려면 위 자습서의 anchor #layermapping 링크를 참조하십시오. 셰이프 파일에서 사용 가능한 데이터와 데이터 모델에 대해 설정된 데이터베이스 열 사이의 필드 매핑입니다.

최소한 튜토리얼을 살펴보고 PostGIS 바인딩을 설정 하고이 GIS 도구가 원하는 것인지 확인하는 데 2-3 시간이 걸렸습니다.

또한 GIS 가능 데이터베이스 (예 : pgsql에 대한 PostGIS 바인딩)가있는 경우 데이터베이스 저장 함수 (예 ST_Contains(...): 샘플 SQL 참조 )를 사용하여 데이터베이스 지오메트리 (선 / 다각형) 데이터에서 직접 '포함'을 포함 할 수 있습니다 . postgis / pgsql의 경우 : http://postgis.refractions.net/docs/ch04.html#id2639062 ... Geodjango의 가장 큰 장점 은 이러한 공간 조회를 수행하도록 최적화되어 있다는 것입니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.