Estoy recopilando valores X e Y de un servicio web (Twitter) a través de un script de Python. A la larga, esto se extenderá durante un período de meses y tengo la intención de parar alrededor de los 6 millones de puntos.
Los códigos originales que estoy obteniendo son geográficos WGS84, pero tendré que convertirlos a WGS Web Mercator proyectado. Posteriormente publicaré esta tabla en un servicio de mapas de ArcGIS Server y la guardaré en caché.
Este es un proyecto personal para aprender Python sin fecha límite y se preguntaba si sería una buena idea utilizar únicamente los tipos espaciales nativos de SQL Server.
Mi plan actual no probado:
- CREA una tabla con SSMS, con una configuración de campo GEOMETRÍA (y algunos otros atributos)
- En mi script de Python, utilizo arcpy o pyproj para convertir los lat / lons en WGS84 a WGS84 Web Mercator (¿o puedo evitar esto de alguna manera y todo se puede lograr con SQL?)
- Utilice pymssql para INSERTAR registros e inserte los puntos en el campo GEOMETRÍA de la tabla.
Mi pregunta es, ¿cuál sería un enfoque bueno, simple y eficiente para tomar un par de lat / lons en WGS84 y luego insertarlos en una tabla de SQL Server haciendo uso de tipos espaciales de SQL Server y tener una capa de puntos resultante que está en WGS84 Web Mercator, para que pueda renderizar / 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.
Respuestas:
Seguí adelante con mi plan, como se indica en la pregunta.
Con el fin de insertar puntos en SQL Server, esta publicación fue muy útil para mí.
Esto es lo que funcionó para mí:
fuente
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 de puntos SQL y convertirlos en una clase de entidad de puntos en cualquier proyección en la que lo necesite. No necesita SQL Tipos espaciales de servidor o ArcSDE.fuente
Supongo que tiene uno o varios archivos grandes llenos de xy y algunos otros datos. Primero, que yo sepa, no hay soporte de proyección en MS SQL (2008 r2 o posterior). Hay soluciones de terceros y la biblioteca proj.net que puede usar para construir una. Por lo tanto, veo dos opciones al almacenar datos en la base de datos, si usa MS SQL, debe volver a proyectar los datos en la proyección deseada antes de insertar la base de datos o simplemente volcar los datos en PostGIS db y transformar allí. PostGIS tiene un conjunto de herramientas mucho mejor en la base de datos que MS SQL
fuente
Se supone que geoAlchemy hace el trabajo usando GeometryColumns. Sin embargo, no pude hacerlo funcionar en Windows / Python 2.7 / sqlalchemy 0.9.6 debido a AttributeError: el objeto de tipo 'ColumnProperty' no tiene el atributo 'ColumnComparator'
fuente