Chèn điểm vào SQL Server bằng pymssql?


12

Tôi đang thu thập các giá trị X và Y từ một dịch vụ web (Twitter) thông qua tập lệnh python. Về lâu dài, việc này sẽ diễn ra trong một vài tháng và tôi dự định dừng lại ở mức khoảng 6 triệu điểm.

Các hợp đồng ban đầu tôi nhận được là WGS84 theo địa lý, nhưng tôi sẽ cần phải chuyển đổi chúng thành WGS Web Mercator dự kiến. Sau này tôi sẽ xuất bản bảng này lên dịch vụ bản đồ ArcGIS Server và lưu vào bộ đệm.

Đây là một dự án cá nhân để học python không có thời hạn và tự hỏi liệu có nên sử dụng các loại không gian bản địa từ SQL Server không?

Kế hoạch chưa được kiểm tra hiện tại của tôi:

  • TẠO một bảng với SSMS, với thiết lập trường GEOMETRY (và một số thuộc tính khác)
  • Trong tập lệnh python của tôi, hãy sử dụng arcpy hoặc pyproj để chuyển đổi lat / lons trong WGS84 thành WGS84 Web Mercator (hoặc tôi có thể tránh điều này bằng cách nào đó và tất cả đều có thể đạt được với SQL?)
  • Sử dụng pymssql để ghi lại các bản ghi và chèn các điểm vào trường GEOMETRY trong bảng.

Câu hỏi của tôi là, cách tiếp cận tốt, đơn giản và hiệu quả để lấy một cặp lat / lons trong WGS84, sau đó chèn chúng vào bảng SQL Server bằng cách sử dụng các loại không gian SQL Server và có một lớp điểm kết quả nằm trong WGS84 Web Mercator, để tôi có thể kết xuất / truy vấn chúng trong ArcGIS Desktop 10.1?

Tôi có quyền truy cập vào Arcpy / ArcSDE 10.1 nếu cần nhưng hy vọng sẽ sử dụng điều này như một ví dụ về việc không yêu cầu ArcSDE.


sử dụng dữ liệu pyproj trước sau đó chèn dữ liệu vào cơ sở dữ liệu MS SQL. hình học :: STPointFromText ('POINT (' + p.longitude + '' + p.latitude + ')', 4326) sẽ tạo WKT cho nó
Simplexio

Và tôi sẽ sử dụng PostGIS nếu bạn có thể
Simplexio

Cảm ơn, nhưng xin vui lòng bạn có thể đưa ra câu trả lời và giải thích lý do tại sao bạn cũng sẽ sử dụng PostGIS.
Simon

Câu trả lời:


6

Tôi đã đi trước với kế hoạch của mình, như đã nêu trong Câu hỏi.

Với mục đích chèn điểm vào SQL Server, bài đăng này rất hữu ích đối với tôi.

Đây là những gì làm việc cho tôi:

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()

Làm thế nào bạn quản lý để chuyển đổi tọa độ của bạn từ WGS84 địa lý sang Web Mercator? Ở trên có vẻ như bạn đã làm như vậy
Peter Horsbøll Møller

1
nhìn vào thư viện pyproj. làm việc một điều trị! HỎI Q khác nếu bạn muốn cụ thể.
Simon

2

Tôi không chắc chắn về toàn bộ các yêu cầu quy trình công việc của bạn, nhưng nếu bạn có quyền truy cập vào Arcpy, thì bạn có thể sử dụng arcpy.ConvertCoordinateNotation_managementđể lấy bảng điểm SQL của mình và chuyển đổi chúng thành một lớp tính năng điểm ở bất kỳ phép chiếu nào bạn cần. Không cần SQL Các loại không gian máy chủ hoặc ArcSDE.


Giải pháp có thể. Tuy nhiên, tôi đã nghĩ rằng nếu tôi thu thập được 6 triệu điểm, thì việc chạy công cụ này vào cuối có thể mất một lúc. Giả sử tôi có thể làm điều đó một cách nhanh chóng, bằng cách đó tôi thực sự có thể xem các điểm trong khi kịch bản vẫn đang thu thập.
Simon

1

Tôi giả sử rằng bạn có một hoặc một số tệp lớn chứa đầy xy và một số dữ liệu khác. Đầu tiên, theo hiểu biết của tôi thì không có hỗ trợ chiếu trong MS SQL (2008 r2 trở lên). có các giải pháp bên thứ ba và thư viện proj.net mà bạn có thể sử dụng để xây dựng. Do đó, tôi thấy hai tùy chọn khi lưu trữ dữ liệu vào cơ sở dữ liệu, nếu sử dụng MS SQL, bạn cần phải chuyển hướng dữ liệu thành phép chiếu mong muốn trước khi chèn cơ sở dữ liệu hoặc bạn chỉ cần đổ dữ liệu vào db PostGIS và thực hiện chuyển đổi ở đó. PostGIS có bộ công cụ cơ sở dữ liệu tốt hơn nhiều so với MS SQL


0

GeoAlchemy được cho là thực hiện công việc bằng GeometryColumns. Tuy nhiên, tôi không thể làm cho nó hoạt động trên Windows / Python 2.7 / sqlalchemy 0.9.6 do AttributionError: loại đối tượng 'ColumnProperty' không có thuộc tính 'CộtComparator'

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.