Pymssql kullanarak SQL Server'a nokta ekleme?


12

Bir python komut dosyası aracılığıyla bir web hizmetinden (Twitter) X ve Y değerleri topluyorum. Uzun vadede, bu aylarca sürecek ve yaklaşık 6 milyon nokta işaretinde durmak niyetindeyim.

Orijinal koordinasyon im coğrafi coğrafi WGS84, ama bunları öngörülen WGS Web Mercator dönüştürmek gerekir. Daha sonra bu tabloyu bir ArcGIS Server harita servisine yayınlayıp önbelleğe alacağım.

Bu, hiçbir son teslim tarihi olmayan python öğrenmek için kişisel bir projedir ve sadece SQL Server'dan yerel uzamsal türleri kullanmanın iyi bir fikir olup olmayacağını merak ediyor muydunuz ?

Mevcut test edilmemiş planım:

  • GEOMETRY alan kurulumuyla (ve diğer bazı özelliklerle) SSMS ile bir tablo OLUŞTURUN
  • Python betiğimde, WGS84'teki lat / lons'ları WGS84 Web Mercator'a dönüştürmek için arcpy veya pyproj kullanın (veya bunu bir şekilde ve SQL ile gerçekleştirilebilir miyim?)
  • Yararlanın pymssql INSERT kayıtlarına ve tabloda GEOMETRİ alanına noktaları yerleştirin.

Benim sorum, WGS84 içinde bir çift lat / lons almak ve daha sonra bunları SQL Server uzamsal türleri kullanarak ve sonuçta elde edilen bir puan katmanına sahip bir SQL Server tabloya eklemek için iyi, basit ve verimli bir yaklaşım olurdu WGS84 Web Mercator, böylece onları ArcGIS Desktop 10.1 render / sorgulamak?

Gerekirse arcpy / ArcSDE 10.1'e erişimim var ama bunu ArcSDE gerektirmeyen bir örnek olarak kullanmayı umuyordum.


önce pyproj verilerini kullanın, ardından MS SQL veritabanına veri ekleyin. geometry :: STPointFromText ('POINT (' + p.longitude + '' + p.latitude + ')', 4326) bunun için WKT oluşturur
simplexio

Eğer yapabilirsen Ve PostGIS kullanırsınız
simplexio

Teşekkürler, ama lütfen bunu bir cevaba koyabilir ve neden PostGIS'i de kullanacağınızı ayrıntılı olarak açıklayabilirsiniz.
Simon

Yanıtlar:


6

Soruda belirtildiği gibi planımla devam ettim.

SQL Server'a nokta eklemek amacıyla bu yazı benim için çok yararlı oldu.

İşte benim için işe yarayan:

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

Koordinatlarınızı coğrafi WGS84'ten Web Mercator'a dönüştürmeyi nasıl başardınız? Yukarıdaki gibi yapmış gibi görünüyor
Peter Horsbøll Møller

1
pyproj kütüphanesine bakın. bir tedavi çalışır! Özellikler istiyorsanız başka bir Q sorun.
Simon

2

Tüm iş akışı gereksinimlerinizden emin değilim, ancak arcpy'ye erişiminiz varsa arcpy.ConvertCoordinateNotation_management, SQL puan tabloyu alıp ihtiyacınız olan projeksiyonda bir nokta özellik sınıfına dönüştürmek için kullanabilirsiniz. SQL'e gerek yok Sunucu uzamsal türleri veya ArcSDE.


Olası çözüm. Ancak, 6M puanları toplarsam, sonunda bu aracı çalıştırmanın biraz zaman alabileceğini düşünüyordum. Anında yapabileceğimi varsayıyordum, bu şekilde senaryo hala toplarken noktaları gerçekten görebiliyorum.
Simon

1

Xy ve diğer bazı verilerle dolu bir veya birkaç büyük dosyanız olduğunu varsayalım. İlk olarak, bildiklerime göre, MS SQL'de (2008 r2 veya üzeri) herhangi bir projeksiyon desteği yoktur. bir tane oluşturmak için kullanabileceğiniz üçüncü taraf çözümleri ve proj.net kütüphanesi var. Bu nedenle, veritabanına veri depolarken iki seçenek görüyorum, MS SQL kullanıyorsanız, veritabanını eklemeden önce istenen projeksiyona verileri yeniden yansıtmanız veya sadece PostGIS db'ye veri dökmeniz ve orada dönüştürmeniz gerekir. PostGIS, veritabanında MS SQL'den çok daha iyi bir araç setine sahiptir


0

geoAlchemy'nin işi GeometryColumns kullanarak yapması gerekiyor. Ancak, Windows / Python 2.7 / sqlalchemy 0.9.6 üzerinde AttributeError nedeniyle çalışmasını sağlayamadım: 'ColumnProperty' türü nesnesi 'ColumnComparator' özniteliğine sahip değil

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.