Konvertieren Sie SQL Server Spatial-Daten in GeoJSON und zeichnen Sie auf der Karte


8

Ich habe eine SQL Server-Tabelle mit Geo-Geodaten. Ein Beispiel für eine Zeile wäre (mit Spaltennamen):

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

Ich verwende C # mit MVC3, um die obigen Formen auf der Faltblattkarte zu zeichnen. Ich rufe die obigen SQL-Daten in eine Datentabelle. Mit der SQL-Funktion "ToString ()" in der Spalte "Geom" erhalte ich Folgendes:

"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))",

Die Frage ist, wie ich das Obige in GeoJSON konvertiere, um auf der Faltblattkarte zeichnen zu können. Hier ist ein Beispiel für die erwartete Ausgabe (GeoJSON), die ich möchte:

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

Antworten:


3

ogr2ogr sollte dies für Sie tun. Sieht so aus, als hätten Sie mehrere Geometrietypen im Dataset, nicht sicher, wie das funktionieren wird. Möglicherweise müssen Sie nach Geometrietyp herausfiltern. Unten nicht getestet. In den oben verlinkten Dokumenten finden Sie Eingaben und Flags.

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

Kennen Sie Beispielcode, um dies mit der .Net-API von GDAL zu erreichen?
Harlan Wescott

@ HarlanWescott - Nein, tut mir leid.
Chad Cooper


0

Sie können dies leicht mit etwas wie (Javascript-Code) lösen.

    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]"}}
*/

Ich habe versucht, dies so einfach wie möglich zu halten, damit Sie es problemlos in eine beliebige Sprache migrieren können. Bitte beachten Sie, dass selbst wenn dies Ihr Problem löst, es nicht empfohlen wird, das Parsen auf diese Weise durchzuführen.

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


Die Frage wurde als für C #, nicht für JavaScript
SteveC

@SteveC - stimmte zu, die Übersetzung sollte für das OP einfach genug sein. Besser eine Lösung haben, die zeigt, wie es gemacht werden kann, als keine.
Dementic

0

Wenn Sie Entity Framework verwenden, können Sie GeoJSON4EntityFramework ausprobieren . Ich habe gerade angefangen, es zu benutzen, und es ist ziemlich ordentlich. Hier ist ein Beispiel mit einem DbGeometryFeld namens Boundaries:

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

Ziemlich einfach.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.