Convierta datos espaciales del servidor SQL a GeoJSON y trace en el mapa


8

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

type: streetline
code: 231001
geog: 0xE6100000011 ........
Centroid 0xE61000000C.......
geom: 0xE6100000011 ........

Estoy usando C # con MVC3 para dibujar las formas anteriores en el mapa de folleto. Estoy recuperando los datos sql anteriores en una tabla de datos. Usando 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 trazar en el mapa de folleto. Aquí hay un ejemplo de la salida esperada (GeoJSON) que quiero:

var geojsonFeature = {
    "type": "Feature",
    "properties": {
        "name": "Coors Field",
        "amenity": "Baseball Stadium",
        "popupContent": "This is where the Rockies play!"
    },
    "geometry": {
        "type": "Point",
        "coordinates": [-104.99404, 39.75621]
    }
};

Respuestas:


3

ogr2ogr debería hacer esto por ti. Parece que tiene varios tipos de geometría en el conjunto de datos, no estoy seguro de cómo funcionará. Puede que tenga que filtrar por tipo de geometría. Abajo no probado. Consulte los documentos vinculados anteriormente para obtener entradas y marcas.

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

¿Conoces el código de muestra para lograr eso con la API .Net de GDAL?
Harlan Wescott

@HarlanWescott - No, lo siento, no lo hago.
Chad Cooper

1

Puedes usar GeoJSON.Net . Estoy planeando trabajar con eso. Te haré saber que es útil cuando lo haga.


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

0

Puede resolver esto fácilmente 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]"}}
*/

Traté de mantener esto lo más simple posible para que pudiera migrarlo fácilmente al idioma que quisiera. Tenga en cuenta que incluso si esto resuelve su problema, no se recomienda realizar el análisis de esta manera.

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


La pregunta fue etiquetada como C #, no JavaScript
SteveC

@SteveC: de acuerdo, traducirlo debería ser lo suficientemente fácil para el OP. Es mejor tener una solución que muestre la forma en que se podría hacer, que no tener ninguna.
Demencia

0

Si está utilizando Entity Framework, puede probar GeoJSON4EntityFramework . Acabo de comenzar a usarlo, y es bastante bueno. Aquí hay un ejemplo, usando un DbGeometrycampo llamado Boundaries:

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

Bastante simple.


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.