Konversikan data Spasial Sql Server ke GeoJSON & plot di peta


8

Saya memiliki tabel server sql dengan data spasial Geo. Contoh barisnya adalah (dengan nama Kolom):

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

Saya menggunakan C # dengan MVC3 untuk menggambar bentuk di atas pada peta selebaran. Saya mengambil data sql di atas menjadi dataat. Menggunakan fungsi sql "ToString ()" pada kolom "geom" saya mendapatkan yang berikut:

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

Pertanyaannya adalah bagaimana cara mengkonversi di atas ke GeoJSON untuk dapat plot di peta selebaran. Berikut adalah contoh dari output yang diharapkan (GeoJSON) yang saya inginkan:

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

Jawaban:


3

ogr2ogr harus melakukan ini untuk Anda. Sepertinya Anda memiliki beberapa tipe geometri dalam dataset, tidak yakin bagaimana itu akan berhasil. Anda mungkin harus memfilter berdasarkan tipe geometri. Di bawah ini tidak diuji. Lihat dokumen yang ditautkan ke atas untuk masukan dan tanda.

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

Apakah Anda tahu kode sampel untuk mencapainya dengan API .AL GDAL?
Harlan Wescott

@ HarlanWescott - Tidak, maaf saya tidak.
Chad Cooper

1

Anda dapat menggunakan GeoJSON.Net . Saya berencana untuk bekerja dengannya. Saya akan memberi tahu Anda tentang kegunaannya saat melakukannya.


2
Bisakah Anda memperbarui jawabannya? Sudah lebih dari setahun.
JP Hellemons

0

Anda dapat dengan mudah menyelesaikan ini dengan sesuatu seperti (kode 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]"}}
*/

Saya mencoba menjaga ini sesederhana mungkin sehingga Anda dapat dengan mudah memindahkannya ke bahasa apa pun yang Anda inginkan. Harap dicatat, bahwa meskipun ini menyelesaikan masalah Anda, tidak disarankan untuk melakukan penguraian dengan cara ini.

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


Pertanyaan itu ditandai sebagai untuk C #, bukan JavaScript
SteveC

@SteveC - setuju, menerjemahkannya seharusnya cukup mudah untuk OP. Lebih baik punya solusi yang menunjukkan cara itu bisa dilakukan, kemudian tidak punya.
Demensik

0

Jika Anda menggunakan Entity Framework, Anda dapat mencoba GeoJSON4EntityFramework . Saya baru saja mulai menggunakannya, dan itu cukup rapi. Berikut ini contohnya, menggunakan DbGeometrybidang yang disebut Boundaries:

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

Cukup mudah.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.