9 votos

Convertir datos espaciales de Sql Server a GeoJSON <code>& plot en el mapa</code>

Tengo una tabla de servidor sql con datos geoespaciales. Un ejemplo de fila sería (con nombres de columna):

tipo: streetline
código: 231001
geog: 0xE6100000011 ........
Centroide: 0xE61000000C.......
geom: 0xE6100000011 ........

Estoy usando C# con MVC3 para dibujar las formas anteriores en un mapa de leaflet. Estoy obteniendo los datos sql anteriores en una tabla de datos. Al usar la función sql "ToString()" en la columna "geom", obtengo lo siguiente:

"LINESTRING (-1.131510412 52.65531, -1.13286 52.65559)",
"POLYGON ((-1.1116360 52.6409953, -1.1116683 52.6413, -1.11146723 52.641317, -1.11133263 52.6413572, -1.1113059))",

La pregunta es ¿cómo convierto lo anterior a GeoJSON para poder trazarlo en el mapa de leaflet? Aquí tienes un ejemplo de la salida esperada (GeoJSON) que deseo:

var geojsonFeature = {
    "type": "Feature",
    "properties": {
        "name": "Coors Field",
        "amenity": "Baseball Stadium",
        "popupContent": "¡Aquí es donde juegan los Rockies!"
    },
    "geometry": {
        "type": "Point",
        "coordinates": [-104.99404, 39.75621]
    }
};

3voto

Arda Xi Puntos 1099

ogr2ogr debería hacer esto por ti. Parece que tienes múltiples tipos de geometría en el conjunto de datos, no estoy seguro de cómo funcionará eso. Es posible que tengas que filtrar por tipo de geometría. A continuación, no probado. Consulta la documentación vinculada arriba para ver entradas y banderas.

ogr2ogr -f "GeoJSON" "sqlexport.geojson"
"MSSQL:server=localhost\sqlexpress;database=tempdb;trusted_connection=yes;"
-sql "SELECT * FROM tbl"

0 votos

¿Conoces algún código de muestra para lograr eso con la API de .Net de GDAL?

0 votos

@HarlanWescott - No, lo siento no lo hago.

1voto

Simon Puntos 41

Puedes usar GeoJSON.Net. Estoy planeando trabajar con ello. Te avisaré sobre su utilidad cuando lo haga.

3 votos

¿Puedes actualizar la respuesta entonces? Ha pasado más de un año.

0voto

user44782 Puntos 180

Puedes resolver fácilmente esto con algo como (código Javascript)

    var dataRows = [{
        id: 1,
        geom: "LINESTRING(-1.131510412 52.65531, -1.13286 52.65559)"
    }];
    features = [];
    dataRows.forEach(function (row) {
        var coords = row.geom.replace("(", "[").replace(")", "]").substring(row.geom.indexOf("("), row.geom.length);
        features.push({
            "type": "Feature",
                "properties": {
                "id": row.id
            },
            "geometry": {
                "type": row.geom.substring(0, row.geom.indexOf("(")),
                "coordinates": coords
            }
        });
    });

    console.log(JSON.stringify(features[0]));
/* OUTPUT:
// {"type":"Feature","properties":{"id":1},"geometry":{"type":"LINESTRING","coordinates":"[-1.131510412 52.65531, -1.13286 52.65559]"}}
*/

Intenté mantener esto lo más simple posible para que puedas migrarlo fácilmente a cualquier otro lenguaje. Ten en cuenta que, aunque esto resuelve tu problema, no se recomienda hacer el análisis de esta manera.

jsfiddle: https://jsfiddle.net/e78cgogo/32/

0 votos

La pregunta fue etiquetada como siendo para C#, no JavaScript

0 votos

@SteveC - de acuerdo, traducirlo debería ser lo suficientemente fácil para el OP. Mejor tener una solución que muestre la forma en que podría hacerse, que no tener ninguna.

0voto

CheeseSucker Puntos 142

Si estás usando Entity Framework, puedes probar GeoJSON4EntityFramework. Acabo de empezar a usarlo y es bastante bueno. Aquí tienes un ejemplo, usando un campo DbGeometry llamado Boundaries:

var feature = new Feature(Boundaries);
var geoJSON = feature.Serialize();

Bastante simple.

-1voto

confused Puntos 56

Cargar y mostrar GeoJSON con Leaflet ha sido bastante detallado aquí: http://leafletjs.com/examples/geojson.html

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