Convertir les données spatiales du serveur SQL en GeoJSON et tracer sur la carte


8

J'ai une table de serveur SQL avec des données géographiques. Un exemple de ligne serait (avec les noms des colonnes):

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

J'utilise C # avec MVC3 pour dessiner les formes ci-dessus sur la carte du dépliant. Je récupère les données SQL ci-dessus dans une table de données. En utilisant la fonction sql "ToString ()" sur la colonne "geom" j'obtiens ce qui suit:

"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 question est de savoir comment convertir ce qui précède en GeoJSON pour pouvoir tracer sur la carte du dépliant. Voici un exemple de la sortie attendue (GeoJSON) que je veux:

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]
    }
};

Réponses:


3

ogr2ogr devrait faire cela pour vous. Il semble que vous ayez plusieurs types de géométrie dans le jeu de données, vous ne savez pas comment cela fonctionnera. Vous devrez peut-être filtrer par type de géométrie. Ci-dessous non testé. Voir les documents liés à ci-dessus pour les entrées et les drapeaux.

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

Connaissez-vous un exemple de code pour y parvenir avec l'API .Net de GDAL?
Harlan Wescott,

@HarlanWescott - Non, désolé, je ne le fais pas.
Chad Cooper

1

Vous pouvez utiliser GeoJSON.Net . J'ai l'intention de travailler avec. Je vous ferai savoir que c'est utile quand je le ferai.


2
Pouvez-vous alors mettre à jour la réponse? Cela fait plus d'un an.
JP Hellemons

0

Vous pouvez facilement résoudre ce problème avec quelque chose comme (code 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]"}}
*/

J'ai essayé de garder cela aussi simple que possible afin que vous puissiez facilement le migrer vers la langue que vous souhaitez. Veuillez noter que même si cela résout votre problème, il n'est pas recommandé de procéder à l'analyse de cette manière.

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


La question a été étiquetée comme étant pour C #, pas JavaScript
SteveC

@SteveC - d'accord, la traduction devrait être assez facile pour le PO. Mieux vaut avoir une solution qui montre comment cela pourrait être fait, alors n'en avoir aucune.
Dementic

0

Si vous utilisez Entity Framework, vous pouvez essayer GeoJSON4EntityFramework . Je viens de commencer à l'utiliser, et c'est assez soigné. Voici un exemple, en utilisant un DbGeometrychamp appelé Boundaries:

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

Assez simple.


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.