Перетворення просторових даних SQL Server на GeoJSON & сюжет на карті

У мене є таблиця SQL Server з просторовими даними Geo. Прикладом рядка буде (з назвами стовпців):

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

Я використовую C# з MVC3 для малювання вище форм на листівці карту. Я витягую вищевказані дані sql в дані. Використовуючи функцію sql "ToString ()" на стовпці "geom", я отримую таке:

"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, джерело
Чи знаєте ви зразок коду для виконання цього завдяки API .Net GDAL?
додано Автор djsmiley2k, джерело

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

1
додано

Ви можете скористатися GeoJSON.Net . Я планую працювати з ним. Я дам вам знати, що це корисно, коли я це роблю.

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
додано
Питання позначено як "C #", а не "JavaScript"
додано Автор Andrzej Doyle, джерело
@SteveC - погодився, переклад його має бути досить простим для ОП. Краще мати рішення, яке показує, як це можна зробити, а потім не мати жодного.
додано Автор Ernest Hegmann, джерело

Якщо ви використовуєте Entity Framework, ви можете спробувати GeoJSON4EntityFramework . Я тільки почав використовувати його, і це досить акуратно. Ось приклад, використовуючи поле DbGeometry з назвою Boundaries :

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

Досить просто.

0
додано
var chat = new Chat();
var chat = new Chat();
642 учасників

Обсуждение вопросов по C# / .NET / .NET Core / .NET Standard / Azure Сообщества-организаторы: — @itkpi — @dncuug

ІТ КПІ - JavaScript
ІТ КПІ - JavaScript
504 учасників

співтовариство javascript розробників в Telegram