使用pymssql将点插入SQL Server?


12

我正在通过python脚本从Web服务(Twitter)收集X和Y值。从长远来看,这将持续几个月,我打算停在600万点左右。

最初输入的坐标是WGS84地理信息,但我需要将其转换为预计的WGS Web Mercator。稍后,该表​​将发布到ArcGIS Server地图服务并进行缓存。

这是一个学习Python的私人项目,没有任何期限,并且想知道仅使用SQL Server 的本机空间类型是否是一个好主意?

我当前未经测试的计划:

  • 使用SSMS创建带有GEOMETRY字段设置(和其他一些属性)的表
  • 在我的python脚本中,利用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,2012年

如果可以的话,我会使用PostGIS
simplexio 2012年

谢谢,但是请您回答一下,并详细说明为什么还要使用PostGIS。
西蒙(Simon)

Answers:


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?在上面看起来好像您已经这样做了
PeterHorsbøllMøller2015年

1
看看pyproj库。工作请客!如果您需要详细信息,请询问另一个Q。
西蒙(Simon)

2

我不确定整个工作流程的要求,但是如果您可以访问arcpy,则可以使用arcpy.ConvertCoordinateNotation_managementSQL点表并将其转换为点要素类(无论您需要使用哪种投影)。不需要SQL服务器空间类型或ArcSDE。


可能的解决方案。但是,我当时想如果我要收集6M点,那么最后运行此工具可能需要一段时间。假设我可以即时执行此操作,这样我就可以在脚本仍在收集时实际查看要点。
西蒙(Simon)

1

我假设您有一个或几个充满xy和其他数据的大文件。首先,据我所知,MS SQL(2008 r2或更高版本)不支持投影。有第三方解决方案和proj.net库,您可以使用它们来构建一个。因此,在将数据存储到数据库时,我会看到两个选项,如果使用MS SQL,则需要在插入数据库之前将数据重新投影到所需的投影中,或者只是将数据转储到PostGIS db中并在那里进行转换。与MS SQL相比,PostGIS在数据库中具有更好的工具集


0

geoAlchemy应该使用GeometryColumns来完成这项工作。但是,由于AttributeError,我无法使其在Windows / Python 2.7 / sqlalchemy 0.9.6上运行:类型对象'ColumnProperty'没有属性'ColumnComparator'

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.