Sql Server SpatialのデータをGeoJSONに変換し、地図上にプロットします

私は地理空間データを持つ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]
    }
};
8

5 答え

ogr2ogr should do this for you. Looks like you have multiple geometry types in the dataset, not sure how that will work out. You might have to filter out by geometry type. Below not tested. See docs linked to above for inputs and flags.

ogr2ogr -f "GeoJSON" "sqlexport.geojson"
"MSSQL:server=localhost\sqlexpress;database=tempdb;trusted_connection=yes;"
-sql "SELECT * FROM tbl"
2
追加された
@ HarlanWescott - いいえ、すみません。
追加された 著者 Farhan,
GDALの.NET APIでそれを達成するためのサンプルコードを知っていますか。
追加された 著者 djsmiley2k,

Loading and displaying GeoJSON with Leaflet has been pretty well detailed here: http://leafletjs.com/examples/geojson.html

1
追加された

GeoJSON.Net を使用できます。私はそれを使う予定です。私がそうするとき、私はあなたにそれが有用であることを知らせます。

1
追加された
それでは答えを更新してもらえますか? 1年以上経ちました。
追加された 著者 j riv,

You can easily solve this with something like (Javascript code)

    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/

0
追加された
この質問はJavaScriptではなくC#用であるとタグ付けされていました
追加された 著者 Andrzej Doyle,
@SteveC - 同意し、それを翻訳することはOPにとって十分に簡単であるべきです。それが可能である方法を示す解決策があればよいのですが、そうでない場合はそうです。
追加された 著者 Ernest Hegmann,

Entity Frameworkを使用している場合は、 GeoJSON4EntityFramework をお試しください。私はちょうどそれを使い始めた、そしてそれはかなりきれいです。これは、 Boundaries という DbGeometry フィールドを使用した例です。

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

ものすごく単純。

0
追加された
JavaScript - 日本のコミュニティ
JavaScript - 日本のコミュニティ
2 参加者の

日本人コミュニティのjavascript