2017-02-07 2 views
1

У меня есть таблица в моей базе данных, где по столбцам имеет тип «геометрия». Я хочу взять данные, содержащиеся в этом столбце (полигоны и круги), и преобразовать их во что-то легко анализируемое и отображаемое в HTML (желательно как SVG), но я, похоже, не могу это сделать.Есть ли способ проанализировать Microsoft.SqlServer.Types.SqlGeometry на SVG?

Я смог извлечь GML и WKT из базы данных, но ни одна из них, похоже, не приблизит меня к моей цели без дополнительного анализа на интерфейсе, который будет подвержен ошибкам. Есть ли встроенные или сторонние библиотеки, способные это сделать? Есть ли простое преобразование, которое я могу сделать, что я упускаю из виду? Я в недоумении, почему это невозможно сделать, поскольку я бы подумал, что это будет полезным инструментом, который потребуется другим.

ответ

1

Относительно легко преобразовать в GeoJson от GEOMETRY и GEOGRAPHY SQL-типы.

Оттуда его легко конвертировать в SVG.

Edit:

NPM package for GeoJson to SVG converter

GitHub repo for another GeoJson to SVG converter

SQL: Returning Spatial Data in GeoJson Format (part 1)

SQL: Returning Spatial Data in GeoJson Format (part 1)

И соответствующая SQL функция из второго урока:

CREATE FUNCTION dbo.geometry2json (@geo GEOMETRY) 
RETURNS NVARCHAR(MAX) 
AS 
    BEGIN 
     RETURN (
    '{' + 
    (CASE @geo.STGeometryType() 
    WHEN 'POINT' THEN 
    '"type": "Point","coordinates":' + 
    REPLACE(REPLACE(REPLACE(REPLACE(@geo.ToString(),'POINT ',''),'(','['),')',']'),' ',',') 
    WHEN 'POLYGON' THEN 
    '"type": "Polygon","coordinates":' + 
    '[' + REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@geo.ToString(),'POLYGON ',''),'(','['),')',']'),'], ',']],['),', ','],['),' ',',') + ']' 
    WHEN 'MULTIPOLYGON' THEN 
    '"type": "MultiPolygon","coordinates":' + 
    '[' + REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@geo.ToString(),'MULTIPOLYGON ',''),'(','['),')',']'),'], ',']],['),', ','],['),' ',',') + ']' 
    WHEN 'MULTIPOINT' THEN 
    '"type": "MultiPoint","coordinates":' + 
    '[' + REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@geo.ToString(),'MULTIPOINT ',''),'(','['),')',']'),'], ',']],['),', ','],['),' ',',') + ']' 
    WHEN 'LINESTRING' THEN 
    '"type": "LineString","coordinates":' + 
    '[' + REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@geo.ToString(),'LINESTRING ',''),'(','['),')',']'),'], ',']],['),', ','],['),' ',',') + ']' 
    ELSE NULL 
    END) 
    +'}'); 
    END; 
+0

Вы говорите, что это относительно легко, не могли бы вы добавить методы и/или инструменты? Благодарю. –

+0

Добавлены ссылки и SQL для GEOMETRY в GeoJson. – toadflakz

Смежные вопросы