SQL Server空間データをGeoJSONに変換し、地図上にプロットする


8

地理空間データを含むSQLサーバーテーブルがあります。行の例は(列名付き)です。

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

上記の図形をリーフレットマップに描画するために、MVC3でC#を使用しています。上記のsqlデータをデータテーブルにフェッチしています。列「geom」でSQL関数「ToString()」を使用すると、次の結果が得られます。

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

問題は、上記をGeoJSONに変換して、リーフレットマップにプロットできるようにする方法です。期待される出力(GeoJSON)の例を次に示します。

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

回答:


3

ogr2ogrがこれを行います。データセットに複数のジオメトリタイプがあるようですが、どのように機能するかわかりません。ジオメトリタイプでフィルタリングする必要がある場合があります。以下はテストされていません。入力とフラグについては、上記にリンクされているドキュメントをご覧ください。

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

GDALの.Net APIでそれを実現するためのサンプルコードを知っていますか?
Harlan Wescott、2015年

@HarlanWescott-いいえ、ごめんなさい。
Chad Cooper

1

GeoJSON.Netを使用できます。一緒に仕事をするつもりです。それが便利なときにお知らせします。


2
次に、答えを更新できますか?それは1年以上になります。
JP Hellemons 2016

0

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

私はこれを可能な限り単純にしておこうと思ったので、好きな言語に簡単に移行できます。これでも難しい問題が解決されることに注意してください。この方法で解析を行うことはお勧めできません。

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


この質問にはJavaScriptではなくC#向けのタグが付けられていました
SteveC

@SteveC-同意され、それを翻訳することはOPにとって十分に簡単であるべきです。それができる方法を示し、それから何も持たないソリューションを持っているほうが良いです。
認知症、

0

Entity Frameworkを使用している場合は、GeoJSON4EntityFrameworkを試すことができます。私はそれを使い始めたばかりで、かなりすっきりしています。次のDbGeometryフィールドを使用した例を示しますBoundaries

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

ものすごく単純。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.