12 votos

¿Insertar puntos en el servidor SQL?

Estoy recolectando valores X e Y de un servicio web (Twitter) a través de un guión de pitón. A largo plazo, esto se llevará a cabo durante un período de meses y tengo la intención de detenerme en alrededor de la marca de 6 millones de puntos.

Las coordenadas originales que estoy obteniendo son geográficas WGS84, pero necesitaré convertirlas a la proyección de WGS Web Mercator. Más tarde publicaré esta tabla en un servicio de mapas del servidor ArcGIS y la almacenaré en caché.

Este es un proyecto personal de aprendizaje de la pitón sin fecha límite y se preguntaba si sería una buena idea hacer uso únicamente de la tipos espaciales nativos del servidor SQL?

Mi actual plan sin probar:

  • CREAR una tabla con SSMS, con una configuración de campo de GEOMETRÍA (y algunos otros atributos)
  • En mi escritura de pitón, usa arcpy o pyproj para convertir los lat/lons de WGS84 a WGS84 Web Mercator (¿o puedo evitarlo de alguna manera y todo esto se puede lograr con SQL?)
  • Aprovechen pymssql para INSERTAR los registros, e insertar los puntos en el campo de la GEOMETRÍA en la tabla.

Mi pregunta es, ¿cuál sería un buen, simple y eficiente enfoque para tomar un par de lat/lons en WGS84, y luego insertarlos en una tabla del Servidor SQL haciendo uso de los tipos espaciales del Servidor SQL y tener una capa de puntos resultante que está en WGS84 Web Mercator, para poder renderizarlos/consultarlos en ArcGIS Desktop 10.1?

Tengo acceso a Arcpy/ArcSDE 10.1 si es necesario, pero esperaba usar esto como un ejemplo de no requerir ArcSDE.

Haga uso de los comentarios si necesita más información y lo editaré en mi Q.

6voto

Neall Puntos 261

Seguí adelante con mi plan, como se indica en la pregunta.

Con el propósito de insertar puntos en el Servidor SQL, este puesto fue muy útil para mí.

Todavía estoy dando pasos de bebé con Python, pero esto es lo que funcionó para mí. Espero que ayude a los demás.

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

2voto

aaronstacy Puntos 1704

No estoy seguro de todos sus requisitos de flujo de trabajo, pero si tiene acceso a Arcpy, entonces podría usar arcpy.ConvertCoordinateNotation_management para tomar su tabla SQL de puntos y convertirlos en una clase de característica de punto en cualquier proyección en la que lo necesite. No hay necesidad de tipos espaciales de SQL Server o ArcSDE.

1voto

Michael Barker Puntos 8234

Asumo que tienes uno o varios archivos grandes llenos de x y y algunos otros datos. Primero, hasta donde yo sé, no hay soporte de proyección en MS SQL (2008 r2 o posterior). Hay soluciones de terceros y la biblioteca proj.net que puedes usar para construir una. Por lo tanto, veo dos opciones cuando se almacenan datos en la base de datos, si se usa MS SQL, es necesario reproyectar los datos en la proyección deseada antes de insertar la base de datos o simplemente volcar los datos en PostGIS db y transformarlos allí. PostGIS tiene un conjunto de herramientas mucho mejor en la base de datos que MS SQL

0voto

Travis Christian Puntos 183

Se supone que la geoalquimia hace el trabajo usando Columnas de Geometría. Sin embargo, no pude hacer que funcionara en Windows/Python 2.7/sqlalchemy 0.9.6 debido al AttributeError: el objeto de tipo 'ColumnProperty' no tiene el atributo 'ColumnComparator'

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X