Mais

Crie uma visão geoserver SQL do Oracle SQL usando uma coluna lat e lng


Eu tenho uma tabela em um banco de dados Oracle SQL na qual tenho uma geometria de polígono e mais duas colunas de latitude e longitude. O que eu preciso é mostrar os pontos de lat e lng em uma camada no geoserver.

Eu fiz algo semelhante usando PostGIS, mas agora com o Oracle eu enfrento um erro. Primeiro criei uma consulta que seleciona as duas colunas, transforma-as no SRID desejado (EPSG: 2100), SUBSTITUA o '.' com o ',' e CAST-los para flutuar (porque são caracteres).

Quando executo a consulta no desenvolvedor Oracle SQL parece que funciona corretamente. Além disso, se eu copiar e colar as coordenadas, elas serão exibidas na posição correta no mapa.

Mas quando eu vejo minha consulta no geoserver para criar uma camada sql view, embora a coluna de geometria seja reconhecida (também o SRID), quando eu clico na opção "compute BBOX" eu obtenho um erro do geoserver.

Como disse, fiz algo parecido com o postGIS e estava funcionando bem. Eu também tentei usar a mesma tabela (mas sua geometria existente; o polígono) e ela também funcionou muito bem.

Acho que deve estar relacionado com a minha consulta, mas não consigo adivinhar o que pode causar esse "erro inesperado do geoserver".

Essa é a minha dúvida:

SELECT ID, CO_NAME, ADJUSTMENT_FACTOR, PORT_LOCATION, VDSL_ENABLED, SDO_CS.TRANSFORM (SDO_GEOMETRY (2100,4326, SDO_POINT_TYPE (CAST (REPLACE (CENTRAL_OFFICES.LAT, '.', ',') AS FLOAT. , '.', ',') AS FLOAT), NULL), NULL, NULL), 2100) AS geom FROM CENTRAL_OFFICES

Vamos supor que sua mesa seja assim:

criar a tabela central_offices (número de id da chave primária, lat varchar2 (20), lng varchar2 (20)); inserir em central_offices (id, lat, lng) valores (1, '39 .018483 ', '22 .9983436'); comprometer-se;

Suas strings são armazenadas com um ponto como separador decimal. Quando você usa essa string em uma instrução que espera um número, o Oracle fará automaticamente a conversão e conversão de tipo adequada, ou seja, analisa a string em um número.

MAS: essa análise acontece no contexto da localidade que você usa em sua sessão. Como 2100 é um sistema grego, presumo que você esteja na Grécia e, portanto, use uma localidade grega em que o separador decimal é uma vírgula. Se você tentar converter a string acima em um número, obterá o seguinte erro:

SQL> selecione to_number ('39 .018483 ') de dual; selecione to_number ('39 .018483 ') de dual * ERROR na linha 1: ORA-01722: μη αποδεκτός αριθμός

Substituindo ',' por '.' na hora é uma solução válida. Uma abordagem mais simples é simplesmente substituir a localidade de sua sessão:

alterar conjunto de sessão nls_numeric_characters = '.,'; selecione id, sdo_cs.transform (sdo_geometry (2001, 4326, sdo_point_type (lng, lat, null), null, null), 2100) .get_wkt () from central_offices; ID SDO_CS.TRANSFORM (SDO_GEOMETRY (2001,4326, SDO_POINT_TYPE (LNG, LAT, NULL), NULL, NULL) ---- ---------------------- -------------------------------------------------- ------- 1 PONTO (413136.397473566 4319017.56676377)

De acordo com este tópico, isso não é possível no GeoServer.

http://osgeo-org.1560.x6.nabble.com/XY-layers-in-Oracle-td5192640.html


Assista o vídeo: GeoServer connects with PostgreSQL (Outubro 2021).