пятница, 18 ноября 2016 г.

Использование стилей MapInfo Professional в geoserver

В MapInfo Professional можно создать слой и добавить геометрические объекты типа точек, полилиний и полигонов с индивидуальными стилями. После экспорта слоя в базу данных Oracle утилитой EasyLoader индивидуальные стили каждой записи содержатся в колонке MI_STYLE в виде строк, а геометрические объекты типа MDSYS.SDO_GEOMETRY – в колонке GEOLOC. У точек в колонке MI_STYLE могут быть значения в формате "Symbol (shape, color, size)", у полилиний – "Pen (width, pattern, color)" и у полигонов – "Pen (width, pattern, color) Brush (pattern, forecolor, backcolor)".
Для стиля символа я использовал набор "Символы MapInfo 3.0", из которого выбрал номера символов с 32 по 37, а также 49 и 50.
Исходный слой в MapInfo Professional выглядит так:
Geoserver генерирует изображение слоя из хранилища Oracle Spatial с использованием созданного универсального стиля SLD, содержащего три правила для каждого типа геометрических объектов:
Архив со стилем можно скачать по ссылке: test.sld.zip. В нём реализован разбор строки MI_STYLE и заполнение значений следующих параметров:
<CssParameter name="fill"/>
<CssParameter name="stroke"/>
<CssParameter name="stroke-width"/>
<WellKnownName/>
<Size/>
<Rotation/>

Можно было добавить подписи к геометрическим объектам, но тогда стиль перестанет быть универсальным, так как потребуется указать имя колонки, содержащей подписи.

четверг, 3 ноября 2016 г.

Добавление пользовательской проекции (Custom CRS) в uDig, geoserver и QGIS

В uDig и geoserver пользовательские проекции хранятся в файлах epsg.properties.
Пути к этим файлам:
.../uDig/2.0.0.RC1/udig/plugins/org.locationtech.udig.libs_2.0.0.RC1/epsg.properties
.../tomcat/webapps/geoserver/data/user_projections/epsg.properties
Нужно добавить в эти файлы строку с новой прекцией:
60000=PROJCS["Mos_prj",GEOGCS["GCS_Krassowsky_1940",DATUM[
"Not specified (based on Krassowsky 1940 ellipsoid)",SPHEROID["Krassowsky 1940",
6378245.0,298.3,AUTHORITY["EPSG","7024"]],AUTHORITY["EPSG",
"6024"]],PRIMEM["Greenwich",0.0,AUTHORITY["EPSG","8901"]],UNIT["degree",
0.0174532925199433],AXIS["Geodetic longitude",EAST],
AXIS["Geodetic latitude",NORTH]],PROJECTION["Transverse_Mercator",
AUTHORITY["EPSG","9807"]],PARAMETER["false_easting",0.0],
PARAMETER["false_northing",0.0],PARAMETER["central_meridian",37.4982],
PARAMETER["scale_factor",1.0],PARAMETER["latitude_of_origin",55.667],
UNIT["m",1.0],AXIS["Easting",EAST],AXIS["Northing",NORTH]]

У QGIS проекции хранятся в БД SQLite. Для вставки новой проекции можно использовать, например, SQuirreL. Нужно добавить драйвер SQLite (sqlitejdbc-v056.jar), создать алиас, выбрать для него драйвер SQLite, добавить URL jdbc:sqlite:/D:\Programs\QGIS 2.18\apps\qgis\resources\srs.db
и выполнить SQL:

INSERT INTO TBL_SRS (srs_id,description,projection_acronym,ellipsoid_acronym,parameters,srid,auth_name,auth_id,
is_geo,deprecated) VALUES (10268,'Mos_prj','tmerc','krass',
'+proj=tmerc +lat_0=55.667 +lon_0=37.4982 +k=1 +x_0=0 +y_0=0 +ellps=krass +units=m +no_defs',60000,'EPSG','60000',0,0)