pymssql을 사용하여 SQL Server에 포인트를 삽입 하시겠습니까?


12

파이썬 스크립트를 통해 웹 서비스 (Twitter)에서 X 및 Y 값을 수집하고 있습니다. 장기적으로이 과정은 몇 개월에 걸쳐 진행될 예정이며 약 6 백만 점을 멈출 계획입니다.

가져 오는 원본 코드는 지리적 WGS84이지만 예상 WGS Web Mercator로 변환해야합니다. 나중에이 테이블을 ArcGIS Server 맵 서비스에 게시하고 캐싱합니다.

마감일없이 파이썬을 배우는 개인 프로젝트이며 SQL Server 의 기본 공간 유형 만 사용하는 것이 좋은지 궁금 하십니까?

현재 테스트되지 않은 계획 :

  • GEOMETRY 필드 설정 및 기타 속성을 사용하여 SSMS로 테이블 작성
  • 파이썬 스크립트에서 arcpy 또는 pyproj 를 사용 하여 WGS84의 위도 / 경도를 WGS84 Web Mercator로 변환하십시오 (또는 어떻게 든 SQL에서 달성 할 수 있습니까?)
  • pymssql 을 사용 하여 레코드를 삽입하고 포인트를 테이블의 GEOMETRY 필드에 삽입하십시오.

내 질문은 WGS84에서 한 쌍의 위도 / 경도를 가져 와서 SQL Server 공간 유형을 사용하여 SQL Server 테이블에 삽입하고 결과 포인트 레이어가있는 훌륭하고 간단하며 효율적인 방법은 무엇입니까? WGS84 Web Mercator, ArcGIS Desktop 10.1에서 렌더링 / 쿼리 할 수 ​​있습니까?

필요한 경우 arcpy / ArcSDE 10.1에 액세스 할 수 있지만 ArcSDE가 필요하지 않은 예로서 이것을 사용하기를 바랐습니다.


pyproj 데이터를 먼저 사용하고 MS SQL 데이터베이스에 데이터를 삽입하십시오. geometry :: STPointFromText ( 'POINT ('+ p.longitude + ''+ p.latitude + ')', 4326)는 이에 대한 WKT를 생성합니다
simplexio

가능하다면 PostGIS를 사용
하겠습니다

고맙지 만,이 답변을 넣고 PostGIS를 왜 사용하는지에 대해 자세히 설명 해주십시오.
Simon

답변:


6

질문에 명시된대로 계획을 진행했습니다.

SQL Server에 포인트를 삽입 할 목적 으로이 게시물 이 매우 유용했습니다.

다음은 나를 위해 일한 것입니다.

import pymssql

# connect to SQL Server instance
conn = pymssql.connect(host='localhost', user='sa', password='sa', database='nosde')

# commits every transaction automatically and setup cursor
conn.autocommit(True)
cur = conn.cursor()

# !!Chunk of code stripped out on how I get my coords, unrelated to Q.

# Store projected coords in a GEOMETRY type field
geom_type = "geometry::STPointFromText('POINT(%s %s)', 3857)" % (x, y)
    try:
        cur.execute("INSERT INTO tweets (geom) VALUES (%s)" % (geom_type))
    except TypeError:
        print "Could not INSERT", clean

    conn.close()

지리적 WGS84에서 Web Mercator로 좌표를 어떻게 변환 했습니까? 위의 내용은 마치 마치 마치 마치 마치
Horsbøll Møller

1
pyproj 라이브러리를보십시오. 치료를한다! 특정 사항을 원하면 다른 Q를 물어보십시오.
Simon

2

전체 워크 플로 요구 사항을 잘 모르겠지만 arcpy에 액세스 할 수 arcpy.ConvertCoordinateNotation_management있으면 SQL 포인트 테이블을 사용 하여 필요한 모든 투영에서 포인트 피쳐 클래스로 변환 할 수 있습니다. SQL이 필요하지 않습니다. 서버 공간 유형 또는 ArcSDE.


가능한 해결책. 그러나 6M 포인트를 수집하는 경우이 도구를 마지막에 실행하는 데 시간이 걸릴 수 있다고 생각했습니다. 스크립트를 계속 수집하는 동안 실제로 포인트를 볼 수있는 방식으로 즉석에서 할 수 있다고 가정했습니다.
Simon

1

xy와 다른 데이터로 채워진 하나 이상의 큰 파일이 있다고 가정합니다. 첫째, MS SQL (2008 r2 이상)에서는 프로젝션이 지원되지 않습니다. 타사 솔루션과 proj.net 라이브러리가 있습니다. 따라서 데이터베이스에 데이터를 저장할 때 두 가지 옵션이 표시됩니다 .MS SQL을 사용하는 경우 데이터베이스를 삽입하기 전에 원하는 프로젝션으로 데이터를 다시 투영하거나 PostGIS db에 데이터를 덤프하고 변환하십시오. PostGIS는 MS SQL보다 데이터베이스에서 훨씬 더 나은 툴셋을 가지고 있습니다.


0

geoAlchemy는 GeometryColumns를 사용하여 작업을 수행해야합니다. 그러나 AttributeError로 인해 Windows / Python 2.7 / sqlalchemy 0.9.6에서 작동하지 못했습니다. type object 'ColumnProperty'에 'ColumnComparator'속성이 없습니다.

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