Chuyển đổi dữ liệu không gian của máy chủ Sql sang GeoJSON & vẽ trên bản đồ


8

Tôi có một bảng máy chủ sql với dữ liệu không gian Geo. Một ví dụ về hàng sẽ là (với tên Cột):

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

Tôi đang sử dụng C # với MVC3 để vẽ các hình trên trên bản đồ tờ rơi. Tôi đang tìm nạp dữ liệu sql ở trên vào một dữ liệu. Sử dụng hàm sql "ToString ()" trên cột "geom" Tôi nhận được như sau:

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

Câu hỏi là làm thế nào để tôi chuyển đổi phần trên thành GeoJSON để có thể vẽ sơ đồ trên tờ rơi. Dưới đây là một ví dụ về đầu ra dự kiến ​​(GeoJSON) tôi muốn:

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

Câu trả lời:


3

ogr2ogr nên làm điều này cho bạn. Có vẻ như bạn có nhiều loại hình học trong bộ dữ liệu, không chắc nó sẽ hoạt động như thế nào. Bạn có thể phải lọc ra theo loại hình học. Dưới đây không được thử nghiệm. Xem tài liệu được liên kết ở trên cho đầu vào và cờ.

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

Bạn có biết mã mẫu để thực hiện điều đó với API .Net của GDAL không?
Harlan Wescott

@HarlanWescott - Không, xin lỗi tôi không.
Chad Cooper

1

Bạn có thể sử dụng GeoJSON.Net . Tôi đang lên kế hoạch để làm việc với nó. Tôi sẽ cho bạn biết nó hữu ích khi tôi làm.


2
Bạn có thể cập nhật câu trả lời sau đó? Nó đã được hơn một năm.
JP Hellemons

0

Bạn có thể dễ dàng giải quyết vấn đề này bằng một cái gì đó như (mã 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]"}}
*/

Tôi đã cố gắng giữ điều này đơn giản nhất có thể để bạn có thể dễ dàng chuyển nó sang bất kỳ ngôn ngữ nào bạn muốn. Xin lưu ý rằng ngay cả khó khăn này cũng giải quyết được vấn đề của bạn, Không nên thực hiện phân tích cú pháp theo cách này.

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


Câu hỏi được gắn thẻ là dành cho C #, không phải JavaScript
SteveC

@SteveC - đồng ý, dịch nó phải đủ dễ dàng cho OP. Tốt hơn là có một giải pháp cho thấy cách nó có thể được thực hiện, sau đó không có.
Mất trí nhớ

0

Nếu bạn đang sử dụng Entity Framework, bạn có thể thử GeoJSON4EntityFramework . Tôi mới bắt đầu sử dụng nó, và nó khá gọn gàng. Đây là một ví dụ, sử dụng một DbGeometrytrường có tên Boundaries:

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

Khá đơn giản.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.