Mais

Como converter uma String em OpenLayers.Geometry.Polygon usando javascript?


Estou usando Javascript, jQuery, Java, GeoServer, OpenLayers e PostGIS.

Usando a classe javaResultSetEu retorno esta String:

POLYGON ((516000 2135000,515039.264020162 2125245.48389919,512193.976625564 2115865.82838175,507573.480615127 2107221.48834902,501355.339059327 2099644.66094067,493778.51165098 2093426.51938487,485134.171618255 2088806.02337444,475754.516100806 2085960.73597984,466000 2085000,456245.483899194 2085960.73597984,446865.828381746 2088806.02337444,438221.48834902 2093426.51938487,430644.660940673 2099644.66094067,424426.519384873 2107221.48834902,419806.023374436 2115865.82838175,416960.735979839 2125245,48389919 , 416000 2135000,416960.735979838 2144754.51610081,419806.023374436 2154134.17161825,424426.519384873 2162778.51165098,430644.660940673 2170355.33905933,438221.48834902 2176573.48061513,446865.828381745 2181193.97662556,456245.483899193 2184039.26402016,466000 2185000,475754.516100806 2184039.26402016,485134.171618254 2181193.97662556,493778.51165098 2176573.48061513,501355.339059327 2170355.33905933,507573.480615127 2162778.51165098,512193.976625564 2154134.17161825,515039.264020161 2144754.51610081.516000 2135000))

Bastante longo, não é? Então, usando a função ajax do JQuery, pego essa String e agora quero convertê-la em umOpenLayers.Geometry.Polygon, esta é a linha onde uso a função ajax:

$ .ajax ({url: "Catcher", data: query, type: "POST", dataType: "text", success: function (data) {var fea = new OpenLayers.Feature.Vector (data); // this não funciona vectorLayer.addFeatures ([fea]); // aqui eu adiciono o recurso à camada vetorial que criei como uma variável global map.zoomToExtent (bounds);}});

Como posso fazer a conversão?


Use a classe OpenLayers.Format.WKT.

Tente substituir esta linha:

var fea = novo OpenLayers.Feature.Vector (dados); // isso não funciona

Para esta linha (se data.d = "POLYGON ((516000…"):

var fea = new OpenLayers.Format.WKT (). read (data.d);

Aqui está um exemplo de como usá-lo: http://dev.openlayers.org/examples/vector-formats.html


OpenLayers. Projeção

Métodos para transformações de coordenadas entre sistemas de coordenadas. Por padrão, o OpenLayers vem com a capacidade de transformar coordenadas entre sistemas de referência de coordenadas geográficas (EPSG: 4326) e web ou mercator esférico (EPSG: 900913 et al.). Consulte o método de transformação para obter detalhes sobre o uso.

Transformações adicionais podem ser adicionadas usando a biblioteca proj4js. Se a biblioteca proj4js for incluída, o método de transformação funcionará entre quaisquer dois sistemas de referência de coordenadas com definições proj4js.

Se a biblioteca proj4js não estiver incluída ou se você desejar permitir transformações entre sistemas de referência de coordenadas arbitrárias, use o método addTransform para registrar um método de transformação personalizado.

OpenLayers. ProjeçãoMétodos para transformações de coordenadas entre sistemas de coordenadas.
Propriedades
proj Instância Proj4js.Proj.
projCode
titleRegEx expressão regular para retirar o título de uma definição do proj4js
Construtor
OpenLayers. ProjeçãoEsta classe oferece vários métodos para interagir com um objeto de projeção pro4js empacotado.
Funções e propriedades
Obter códigoObtenha o código SRS da string.
getUnitsObtenha a string de unidades para a projeção - retorna nulo se proj4js não estiver disponível.
para sequenciarConverte a projeção em string (wrapper getCode).
é igual aTeste a igualdade de duas instâncias de projeção.
destruirDestrua o objeto de projeção.
transforma Transforms é um objeto, com propriedades from, cada uma das quais pode ter uma propriedade to.
padrões Padrões para os códigos SRS conhecidos para OpenLayers (atualmente EPSG: 4326, CRS: 84, urn: ogc: def: crs: EPSG: 6.6: 4326, EPSG: 900913, EPSG: 3857, EPSG: 102113 e EPSG: 102100).
addTransformDefina um método de transformação personalizado entre duas projeções.
transformarTransforme uma coordenada de ponto de uma projeção para outra.
nullTransform

Propriedades

ProjCode

TitleRegEx

expressão regular para retirar o título de uma definição de proj4js

Construtor

OpenLayers. Projeção

Esta classe oferece vários métodos para interagir com um objeto de projeção pro4js empacotado.

Parâmetros

projCode Uma string que identifica o identificador conhecido da projeção.
opções Um objeto opcional para definir propriedades adicionais na projeção.

Devoluções

Funções e propriedades

Obter código

Devoluções

GetUnits

Obtenha a string de unidades para a projeção - retorna nulo se proj4js não estiver disponível.

Devoluções

Para sequenciar

Converte a projeção em string (wrapper getCode).

Devoluções

É igual a

Teste a igualdade de duas instâncias de projeção. Determina a igualdade com base apenas no código de projeção.

Devoluções

As duas projeções são equivalentes.

Destruir

Destrua o objeto de projeção.

Transforma

Transforms é um objeto, com propriedades from, cada uma das quais pode ter uma propriedade to. Isso permite que você defina as projeções sem exigir que o suporte para proj4js seja incluído.

Este objeto possui chaves que correspondem a um objeto de projeção & lsquosource & rsquo. As chaves devem ser strings, correspondendo ao valor projection.getCode (). Cada objeto de projeção de origem deve ter um conjunto de chaves de projeção de destino incluídas no objeto.

Cada valor no objeto de destino deve ser uma função de transformação, em que se espera que a função receba um objeto com uma propriedade .x e .y. A função deve retornar o objeto, com o .x e .y transformados de acordo com a função de transformação.

ObservaçãoAs propriedades neste objeto não devem ser definidas diretamente. Para adicionar um método de transformação a este objeto, use o método addTransform. Para obter um exemplo de uso, consulte o arquivo OpenLayers.Layer.SphericalMercator.

Padrões

Padrões para os códigos SRS conhecidos para OpenLayers (atualmente EPSG: 4326, CRS: 84, urn: ogc: def: crs: EPSG: 6.6: 4326, EPSG: 900913, EPSG: 3857, EPSG: 102113 e EPSG: 102100). As chaves são o código SRS, os valores são unidades, maxExtent (a extensão de validade do SRS) e yx (verdadeiro se este SRS tiver uma ordem inversa do eixo).

AddTransform

Defina um método de transformação personalizado entre duas projeções. Use este método nos casos em que a lib proj4js não está disponível ou onde projeções personalizadas precisam ser manipuladas.

Parâmetros

a partir de O código para a projeção de origem
para o código para a projeção de destino
método Uma função que pega um ponto como argumento e transforma esse ponto da projeção de origem para a projeção de destino no local. O ponto original deve ser modificado.

Transformar

Transforme uma coordenada de ponto de uma projeção para outra. Observe que o ponto de entrada é transformado no lugar.


Se você deseja relatar um erro, ou se deseja fazer uma sugestão, não hesite em nos enviar um e-mail:

Sua mensagem foi enviada para W3Schools.

Principais tutoriais

Referências principais

Principais exemplos

Cursos da Web

W3Schools é otimizado para aprendizagem e treinamento. Os exemplos podem ser simplificados para melhorar a leitura e o aprendizado. Tutoriais, referências e exemplos são constantemente revisados ​​para evitar erros, mas não podemos garantir a correção total de todo o conteúdo. Ao usar o W3Schools, você concorda em ter lido e aceito nossos termos de uso, cookies e política de privacidade.


Gerenciando erros e novas tentativas

Se você receber respostas UNKNOWN_ERROR, elas são causadas por erros temporários e é melhor lidar com elas tentando novamente após um pequeno atraso. Recomendamos o uso das bibliotecas cliente de serviços da web da plataforma do Google Maps, que incluem lógica de repetição e suporte à autenticação do plano premium da plataforma do Google Maps O cliente Java, o cliente Python, o cliente Go e o cliente Node.js para os serviços do Google Maps são bibliotecas cliente com suporte da comunidade, disponíveis para download e contribuições no GitHub, onde você também encontrará instruções de instalação e código de amostra.

Se você obtiver um código de status OVER_QUERY_LIMIT como resposta, significa que excedeu os limites de uso da API. Recomendamos que você experimente essas estratégias de otimização de uso.

Exceto quando indicado de outra forma, o conteúdo desta página está licenciado pela Licença Creative Commons Atribuição 4.0, e os exemplos de código são licenciados pela Licença Apache 2.0. Para obter detalhes, consulte as políticas de sites para desenvolvedores do Google. Java é uma marca registrada da Oracle e / ou de suas afiliadas.


OpenLayers. Projeção

Métodos para transformações de coordenadas entre sistemas de coordenadas. Por padrão, o OpenLayers vem com a capacidade de transformar coordenadas entre sistemas de referência de coordenadas geográficas (EPSG: 4326) e web ou mercator esférico (EPSG: 900913 et al.). Consulte o método de transformação para obter detalhes sobre o uso.

Transformações adicionais podem ser adicionadas usando a biblioteca proj4js. Se a biblioteca proj4js for incluída, o método de transformação funcionará entre quaisquer dois sistemas de referência de coordenadas com definições proj4js.

Se a biblioteca proj4js não estiver incluída ou se você desejar permitir transformações entre sistemas de referência de coordenadas arbitrárias, use o método addTransform para registrar um método de transformação personalizado.

OpenLayers. ProjeçãoMétodos para transformações de coordenadas entre sistemas de coordenadas.
Propriedades
proj Instância Proj4js.Proj.
projCode
titleRegEx expressão regular para retirar o título de uma definição de proj4js
Construtor
OpenLayers. ProjeçãoEsta classe oferece vários métodos para interagir com um objeto de projeção pro4js empacotado.
Funções e propriedades
Obter códigoObtenha o código SRS da string.
getUnitsObtenha a string de unidades para a projeção - retorna nulo se proj4js não estiver disponível.
para sequenciarConverte a projeção em string (wrapper getCode).
é igual aTeste a igualdade de duas instâncias de projeção.
destruirDestrua o objeto de projeção.
transforma Transforms é um objeto, com propriedades from, cada uma das quais pode ter uma propriedade to.
padrões Padrões para os códigos SRS conhecidos pelos OpenLayers (atualmente EPSG: 4326, CRS: 84, urn: ogc: def: crs: EPSG: 6.6: 4326, EPSG: 900913, EPSG: 3857, EPSG: 102113, EPSG: 102100 e OSGEO: 41001).
addTransformDefina um método de transformação personalizado entre duas projeções.
transformarTransforme uma coordenada de ponto de uma projeção para outra.
nullTransform

Propriedades

ProjCode

TitleRegEx

expressão regular para retirar o título de uma definição de proj4js

Construtor

OpenLayers. Projeção

Esta classe oferece vários métodos para interagir com um objeto de projeção pro4js empacotado.

Parâmetros

projCode Uma string que identifica o identificador conhecido para a projeção.
opções Um objeto opcional para definir propriedades adicionais na projeção.

Devoluções

Funções e propriedades

Obter código

Devoluções

GetUnits

Obtenha a string de unidades para a projeção - retorna nulo se proj4js não estiver disponível.

Devoluções

Para sequenciar

Converte a projeção em string (wrapper getCode).

Devoluções

É igual a

Teste a igualdade de duas instâncias de projeção. Determina a igualdade com base exclusivamente no código de projeção.

Devoluções

As duas projeções são equivalentes.

Destruir

Destrua o objeto de projeção.

Transforma

Transforms é um objeto, com propriedades from, cada uma das quais pode ter uma propriedade to. Isso permite que você defina as projeções sem exigir que o suporte para proj4js seja incluído.

Este objeto possui chaves que correspondem a um objeto de projeção & lsquosource & rsquo. As chaves devem ser strings, correspondendo ao valor projection.getCode (). Cada objeto de projeção de origem deve ter um conjunto de chaves de projeção de destino incluídas no objeto.

Cada valor no objeto de destino deve ser uma função de transformação, em que se espera que a função receba um objeto com uma propriedade .x e .y. A função deve retornar o objeto, com o .x e .y transformados de acordo com a função de transformação.

ObservaçãoAs propriedades neste objeto não devem ser definidas diretamente. Para adicionar um método de transformação a este objeto, use o método addTransform. Para obter um exemplo de uso, consulte o arquivo OpenLayers.Layer.SphericalMercator.

Padrões

Padrões para os códigos SRS conhecidos pelos OpenLayers (atualmente EPSG: 4326, CRS: 84, urn: ogc: def: crs: EPSG: 6.6: 4326, EPSG: 900913, EPSG: 3857, EPSG: 102113, EPSG: 102100 e OSGEO: 41001). As chaves são o código SRS, os valores são unidades, maxExtent (a extensão de validade para o SRS em coordenadas projetadas), worldExtent (a extensão world & rsquos em EPSG: 4326) e yx (verdadeiro se este SRS for conhecido por ter uma ordem de eixo reversa).

AddTransform

Defina um método de transformação personalizado entre duas projeções. Use este método nos casos em que a lib proj4js não está disponível ou onde projeções personalizadas precisam ser manipuladas.

Parâmetros

a partir de O código para a projeção de origem
para o código para a projeção de destino
método Uma função que pega um ponto como argumento e transforma esse ponto da projeção de origem para a projeção de destino no local. O ponto original deve ser modificado.

Transformar

Transforme uma coordenada de ponto de uma projeção para outra. Observe que o ponto de entrada é transformado no lugar.


Como converter uma String em OpenLayers.Geometry.Polygon usando javascript? - Sistemas de Informação Geográfica

Linguagem de marcação geográfica

Ron Lake
Galdos Systems Inc

Este artigo fornece uma breve introdução à Geography Markup Language (GML). Este artigo é o primeiro de uma série de artigos para familiarizá-lo com essa maneira empolgante de representar e manipular informações geográficas. Os artigos a seguir neste site apresentarão a você uma variedade de tópicos GML, incluindo criação de mapas GML, transformações de dados GML, consultas espaciais e análise geográfica, bancos de dados espaciais baseados em GML e uma variedade de aplicativos GML, incluindo aplicativos para sistemas de computação móvel. Esperamos que o GML revolucione o tratamento da informação espacial. GML é compatível com a web. Pela primeira vez, as informações espaciais terão um padrão de codificação verdadeiramente público.

GML ou Geography Markup Language é um padrão de codificação baseado em XML para informações geográficas desenvolvido pelo OpenGIS Consortium (OGC). Seu status atual é um RFC em revisão no OpenGIS Consortium. O RFC é suportado por uma variedade de fornecedores, incluindo Oracle Corporation, Galdos Systems Inc, MapInfo, CubeWerx e Compusult Ltd. GML foi implementado e testado por meio de uma série de demonstrações que faziam parte do Web Mapping Test Bed (WMT) do OpenGIS Consortium conduzido em Setembro de 1999. Esses testes envolveram clientes de mapeamento GML interagindo com servidores de dados GML e provedores de serviços.

2.2 Geografia, Gráficos e Mapas

Antes de examinarmos o GML em si, é importante traçarmos algumas distinções claras entre os dados geográficos (que são codificados em GML) e as interpretações gráficas desses dados como podem aparecer em um mapa ou outra forma de visualização. Os dados geográficos referem-se a uma representação do mundo em termos espaciais que é independente de qualquer visualização particular desses dados. Quando falamos em dados geográficos, tentamos capturar informações sobre as propriedades e a geometria dos objetos que povoam o mundo que nos rodeia. Como os simbolizamos em um mapa, quais cores ou espessuras de linha usamos é algo bem diferente. Assim como o XML agora está ajudando a Web a separar claramente o conteúdo da apresentação, o GML fará o mesmo no mundo da geografia.

GML se preocupa com a representação do conteúdo dos dados geográficos. Claro que também podemos usar GML para fazer mapas. Isso pode ser feito com o desenvolvimento de uma ferramenta de renderização para interpretar dados GML; no entanto, isso iria contra a abordagem GML para padronização e para a separação de conteúdo e apresentação. Para fazer um mapa de GML, precisamos apenas estilizar os elementos GML em uma forma que possa ser interpretada para exibição gráfica em um navegador da web. Os possíveis formatos de exibição gráfica incluem W3C Scalable Vector Graphics (SVG), Microsoft Vector Markup Language (VML) e X3D. Um estilizador de mapa é, portanto, usado para localizar elementos GML e interpretá-los usando estilos gráficos específicos. O próximo artigo desta série tratará da geração de um mapa a partir de GML usando SVG e X3D.

Como qualquer codificação XML, GML representa informações geográficas na forma de texto. Embora há pouco tempo isso possa ter sido considerado proibido no mundo dos sistemas de informações espaciais, a ideia agora está ganhando muito ímpeto. O texto tem certa simplicidade e visibilidade na lateral. É fácil de inspecionar e fácil de mudar. Adicione XML e também pode ser controlado.

Os formatos de texto para geometria e geografia já foram empregados antes. O trabalho pioneiro da Província de British Columbia com seu formato SAIF é apenas um exemplo. Na província de British Columbia, mais de 7.000 arquivos de dados de escala 1: 20.000, incluindo topografia, planimetria (hidrografia, edifícios, estradas, etc.) e toponímia estão disponíveis no formato SAIF. A Província demonstrou que os formatos de texto são práticos e fáceis de usar. Outro exemplo do uso de texto para conjuntos de dados geométricos complexos é o de VRML (Vector Markup Language). Modelos VRML grandes e complexos foram construídos e navegados pela Web, todos usando codificação baseada em texto. Curiosamente, a geometria e o comportamento VRML estão agora sendo reformulados em XML por meio dos esforços do Grupo de Trabalho X3D.

2.4 GML codifica geometria e propriedades de recursos

GML é baseado no modelo abstrato de geografia desenvolvido pelo OGC. Isso descreve o mundo em termos de entidades geográficas chamadas recursos. Essencialmente, um recurso nada mais é do que uma lista de propriedades e geometrias. As propriedades têm o nome, tipo e descrição de valor usuais. As geometrias são compostas de blocos básicos de geometria, como pontos, linhas, curvas, superfícies e polígonos. Para simplificar, a especificação GML inicial é restrita à geometria 2D, no entanto, as extensões aparecerão em breve, as quais lidarão com geometria 2 1/2 e 3D, bem como relações topológicas entre recursos.

A codificação GML já permite recursos bastante complexos. Um recurso pode, por exemplo, ser composto de outros recursos. Um único recurso, como um aeroporto, pode ser composto de outros recursos, como corredores de táxi, pistas, hangares e terminais aéreos. A geometria de um recurso geográfico também pode ser composta de muitos elementos geométricos. Um recurso geometricamente complexo pode consistir em uma mistura de tipos de geometria, incluindo pontos, strings de linha e polígonos.

Para codificar a geometria de um recurso como um edifício, simplesmente escrevemos:

Um componente essencial de um sistema geográfico é um meio de referenciar as características geográficas à superfície terrestre ou a alguma estrutura relacionada à superfície terrestre. A versão atual do GML incorpora um sistema de referência espacial baseado em terra que é extensível e que incorpora a projeção principal e os referenciais geocêntricos em uso hoje. É capaz de codificar todos os sistemas de referência que podem ser encontrados no site do European Petroleum Standards Group (EPSG). Além disso, o esquema de codificação permite unidades definidas pelo usuário e parâmetros do sistema de referência. As versões futuras do GML provavelmente fornecerão codificações ainda mais flexíveis para lidar com sistemas de coordenadas locais, como os usados ​​para registro de milhas, etc.

  • Validação de cliente de um Sistema de Referência Espacial especificado pelo servidor. O cliente pode solicitar a descrição SRS (um documento XML) e compará-la com suas próprias especificações ou mostrá-la a um usuário para verificação.
  • Exibição do cliente de um sistema de referência espacial especificado pelo servidor.
  • Use por um Serviço de Transformação de Coordenadas para validar um Sistema de Referência Espacial de fontes de dados de entrada.
  • Um Serviço de Transformação de Coordenadas pode comparar a descrição do SRS com suas próprias especificações para ver se o SRS é consistente com a transformação selecionada.
  • Para controlar a transformação automatizada de coordenadas, fornecendo nomes de sistema de referência de entrada e saída e valores de argumento.

Com a codificação GML para referências espaciais, é possível criar um site que armazena qualquer número de definições de sistema de referência espacial. Fique ligado no site GeoJava para codificações padrão de sistemas de referência espacial comuns.

2.6 Coleções de recursos GML

A recomendação XML 1.0 do W3C é baseada na noção de um documento. A versão atual do GML é baseada em XML 1.0 e usa um FeatureCollection como base para seu documento. Um FeatureCollection é uma coleção de Recursos GML junto com um Envelope (que delimita o conjunto de Recursos), uma coleção de Propriedades que se aplicam a FeatureCollection e uma lista opcional de Definições de Sistema de Referência Espacial. Um FeatureCollection também pode conter outros FeatureCollections, desde que o Envelope do FeatureCollection delimitador delimite os Envelopes de todos os FeatureCollections contidos.

Quando uma solicitação é feita para dados GML de um servidor GML, os dados são sempre retornados em FeatureCollections. Não há limite no GML RFC sobre o número de recursos que podem estar contidos em um FeatureCollection. Como FeatureCollections pode conter outros FeatureCollections, é um procedimento relativamente simples "unir" FeatureCollections recebidos de um servidor em coleções ainda maiores.

2.7 GML - Mais do que um Transporte de Dados

Embora GML seja um meio eficaz para transportar informações geográficas de um lugar para outro, esperamos que também se torne um meio importante de armazenamento de informações geográficas. O elemento-chave aqui é XLink e XPointer. Embora essas duas especificações estejam atrasadas na área de desenvolvimento e implementação, elas são uma grande promessa para a construção de conjuntos de dados geográficos complexos e distribuídos. Os dados geográficos são, bem, geográficos. É naturalmente distribuído pela face da Terra. O interesse em dados sobre Flin Flon, Saskatchewan é muito maior perto de Flin Flon do que seria em Pasadena, Califórnia. Ao mesmo tempo, existem aplicativos que precisam alcançar e obter dados em uma base global para análises em grande escala ou devido ao interesse em um domínio vertical estreito. Aplicações desse último tipo também abundam em uma coleção diversificada de campos, desde proteção ambiental até mineração, construção de rodovias e gerenciamento de desastres. Seria bom se os dados pudessem ser desenvolvidos em escala local e prontamente integrados às escalas regional e global?

Na maioria das jurisdições, os dados geográficos são coletados por agências específicas para uma finalidade específica. Os escritórios florestais coletam informações sobre a disposição das árvores (diâmetros das árvores, condições do local, taxas de crescimento) para o manejo eficaz das florestas comerciais. Os departamentos ambientais coletam informações sobre a distribuição de animais e seu habitat. Os interesses de desenvolvimento mantêm informações sobre dados demográficos e recursos existentes no ambiente construído. Os problemas do mundo real raramente, entretanto, respeitam os limites paroquiais de departamentos, ministérios e escritórios. Quão bom seria se os dados desenvolvidos para um propósito pudessem ser prontamente integrados aos dados desenvolvidos para outro?

Acreditamos que GML como um formato de armazenamento, combinado com XLink e XPointer fornecerá algumas contribuições úteis para esses problemas. Assista ao site GeoJava para nosso artigo sobre Bancos de dados espaciais GML.

2.8 De quais tecnologias isso depende?

GML é baseado em XML. XML, embora às vezes seja falado como um substituto para HTML, é melhor pensado como uma linguagem para descrição de dados. Mais corretamente, XML é uma linguagem para expressar linguagens de descrição de dados. XML, entretanto, não é uma linguagem de programação. Não há mecanismos em XML para expressar comportamento ou realizar cálculos. Isso é deixado para outras linguagens como Java e C ++.

XML 1.0 fornece um meio de descrever (marcar) dados usando tags definidas pelo usuário. Cada segmento de um documento XML é limitado por tags de início e fim. Isso se parece com o seguinte:

& ltFeature>
. mais descrições XML.
.
& lt / Recurso>

Os nomes de tag válidos são determinados pela Definição do Tipo de Documento. Quais tags podem aparecer dentro de um par de tags de abertura e fechamento também é determinado pelo DTD.

As tags XML também podem ter atributos associados a elas. Eles também são restringidos pelo DTD em nome e, em alguns casos, em termos dos valores que os atributos podem assumir.

XML normalmente é lido por um analisador XML. Todos os analisadores XML verificam se os dados estão bem formados para que a corrupção de dados (por exemplo, tag de fechamento ausente) não possa passar despercebida. Muitos analisadores XML também estão validando, o que significa que eles verificam se o documento está em conformidade com o DTD associado.

Usar XML é comparativamente fácil de gerar e validar estruturas de dados hierárquicas complexas. Essas estruturas são comuns em aplicações geográficas.

2.8.2 XSL e XSLT (Transformando a WWW)

O foco original do XML era fornecer um meio de descrever dados separados de sua apresentação, especialmente no contexto da rede mundial de computadores. O XML versão 1.0 trata da descrição dos dados. Uma tecnologia complementar, chamada XSL, deveria lidar com o lado da apresentação. Com o tempo, tornou-se aparente que XSL é na verdade duas tecnologias diferentes. Um, agora chamado de XSLT (o T significa Transformação), é focado na transformação de XML. A outra tecnologia se preocupa com a formatação real de texto ou imagens e é referida em termos de objetos de formato ou objetos de fluxo. Em nossas discussões, estamos preocupados apenas com o XSLT. Uma vez que muitas ferramentas (por exemplo, MS IE 5.0) foram desenvolvidas antes de o rótulo XSLT ter colado, o XSL ainda é frequentemente usado quando apenas o XSLT é pretendido. Seguiremos essa prática.

Se você segue xml.com, deve se lembrar de muitas discussões sobre os méritos do XSL. O esclarecimento do XSLT ajudou a amortecer um pouco essa discussão; no entanto, ainda há muito ceticismo em relação à utilidade e à necessidade do XSL em alguns setores da comunidade XML. Estamos do lado oposto da questão. Acreditamos que o caráter transformacional do XML é o mais importante, e o XSL (XSLT) fornece um meio declarativo claro para expressar essas transformações. Em nossa visão, o XSLT é tão essencial para o GML quanto o próprio XML.

XSL é uma linguagem bastante simples. Ele fornece uma sintaxe poderosa para expressar correspondência e substituição de padrões. É declarativo. Você pode ler facilmente o que o XSLT diz para fazer. Você não consegue ver como isso é realizado. Usando suas especificações complementares (XPath e XQL), você pode especificar algumas consultas muito poderosas em um documento XML. Além disso, o XSLT incorpora a capacidade de chamar funções em outra linguagem de programação, como VBScript ou Java, por meio do uso de funções de extensão. Isso significa que o XSL pode ser usado para fazer a consulta e a seleção e, em seguida, chamar o Java ou outra linguagem para realizar os cálculos necessários ou a manipulação de strings. Para tarefas simples, o XSLT fornece recursos integrados de manipulação de strings e aritmética.

2.8.3 SVG, VML e X3D - gráficos vetoriais para a web

XML fez sua presença ser sentida em muitos setores diferentes, não menos importante dos quais são os gráficos vetoriais. Várias especificações baseadas em XML para descrever elementos gráficos vetoriais foram desenvolvidas, incluindo Scalable Vector Graphics (SVG), Vector Markup Language (VML) da Microsoft e X3D, a encarnação XML da sintaxe e comportamento de VRML (Virtual Reality Markup Language). Essas especificações são em muitos aspectos semelhantes ao GML, mas têm um objetivo muito diferente. Cada um tem um meio de descrever a geometria. As especificações gráficas, no entanto, estão focadas na aparência e, portanto, incluem propriedades e elementos para cores, espessuras de linha e transparência, para citar apenas alguns aspectos. Para visualizar um arquivo de dados SVG, VML ou X3D, é necessário ter um visualizador gráfico de dados adequado. No caso do VML, ele é integrado ao IE 5.0 (e em nenhum outro lugar). No caso do SVG, a Adobe está desenvolvendo uma série de plug-ins para Internet Explorer e Netscape Communicator, bem como Adobe Illustrator, enquanto a IBM e várias outras empresas são, ou já desenvolveram, visualizadores SVG ou bibliotecas gráficas de suporte. Vários visualizadores Java SVG estão disponíveis ou em desenvolvimento.

Para desenhar um mapa de dados GML, você precisa transformar o GML em um dos formatos de dados vetoriais gráficos, como SVG, VML ou VRML. Isso significa associar um "estilo" gráfico (por exemplo, símbolo, cor, textura) a cada tipo de recurso GML ou instância de recurso. Teremos mais a dizer sobre isso no artigo GeoJava, Making Maps from GML.

A Figura 1. ilustra o desenho do mapa usando uma folha de estilo XSLT em um cliente de mapeamento adequado.

Com a tecnologia HTML atual, é possível construir conjuntos de dados geográficos vinculados. É possível construir mapas de imagens prontamente que estão vinculados a outros mapas de imagens. O mecanismo de vinculação de HTML tem, no entanto, muitas limitações e, como resultado, não é prático construir grandes conjuntos de dados distribuídos complexos como ocorre em sistemas do mundo real. A limitação mais significativa é que um link HTML é efetivamente codificado em ambos os documentos de origem (& lta href =.>) E de destino (âncora), um fato que tornaria qualquer sistema significativo frágil e impossível de escalar. XLink contorna esses problemas permitindo links "fora de linha". Em um link fora de linha, a origem aponta apenas para um banco de dados de link e é o banco de dados de link que fornece o ponteiro para elementos XML específicos no documento de destino. O link, portanto, não é codificado em nenhum dos documentos. Isso é de grande importância em relação ao GML, pois torna possível construir conjuntos de dados geográficos escaláveis ​​e distribuídos. Ainda mais importante, o XLink e o XPointer tornam possível construir índices específicos de aplicativos para datas. Precisa ter um grupo de edifícios organizados por endereço? Quer criar um índice de parcela de fazenda com base no tipo de cultura? Com XLink e XPointer, esses e muitos outros esquemas de indexação podem ser construídos prontamente, e tudo sem alterar os próprios dados de origem. Teremos muito mais a dizer sobre isso nos próximos artigos.

Por que introduzir o GML? Já existe uma série de padrões de codificação para informações geográficas, incluindo COGIF, MDIFF, SAIF, DLG, SDTS, para citar apenas alguns. O que há de tão diferente no GML? Em alguns aspectos, nada. GML é uma codificação simples baseada em texto de recursos geográficos. Alguns desses outros formatos não são baseados em texto, no entanto, alguns deles (por exemplo, SAIF) com certeza são. O GML é baseado em um modelo comum de geografia (OGC Abstract Specification) que foi desenvolvido e aceito pela grande maioria de todos os fornecedores de GIS no mundo. Mais importante, entretanto, o GML é baseado em XML. Por que isso importa? Existem vários motivos pelos quais o XML é importante. Para começar, o XML fornece um método para verificar a integridade dos dados. Em segundo lugar, qualquer documento XML pode ser lido e editado usando um editor de texto simples. Nada mais do que o MS Notepad é necessário para visualizar ou alterar um documento XML. Em terceiro lugar, como há um número crescente de linguagens XML, será cada vez mais fácil integrar dados GML com dados não espaciais. Mesmo no caso de dados não espaciais não XML, esse é o caso. Talvez, o mais importante, XML seja fácil de transformar. Usando XSLT ou quase qualquer outra linguagem de programação (VB, VBScript, Java, C ++, Javascript), podemos transformar facilmente o XML de uma forma para outra. Um único mecanismo pode, portanto, ser empregado para uma série de transformações de visualização de dados para coordenar transformações, consultas espaciais e generalização geoespacial.

O GML se apóia com segurança em um padrão público amplamente adotado, o XML. Isso garante que os dados GML possam ser visualizados, editados e transformados por uma ampla variedade de ferramentas comerciais e gratuitas. Pela primeira vez, podemos realmente falar sobre informações geográficas abertas.

3.1 Verificação automatizada de integridade de dados

One of the important features of XML is the ability to verify data integrity. In the XML 1.0 Recommendation this is achieved through the Document Type Definition (DTD). The DTD specifies the structure of an XML document in a such a way that a validating parser can verify that a given document instance complies with this DTD. GML is specified by such a DTD. Future versions of GML will also be supported by XML Schema, a more flexible integrity mechanism than the DTD that should become a W3C Recommendation early in 2000.

Using the GML DTD, servers and clients can readily verify that the data they are to send or receive complies with the specification. Furthermore this can be accomplished with a variety of parsing tools by at least a have a dozen different vendors on a wide variety of operating systems, databases, application servers and browsers.

3.2 GML can be Read by Public Tools

As we have already noted, GML is text and one need have nothing more than a simple text editor to read it. GML, however, is structured, and any of a variety of XML editors can be employed to display that structure. This makes viewing and navigating GML data very easy as shown in Figure 2.

Figure 2. Sample GML File Viewed in XML Spy

3.3 GML can be Easily Edited

Using the many XML editors described in Section 3.2 it is also very easy to edit GML data. Want to add a new feature property or change a property value ? Need to adjust a features geometry. These are easily accomplished with a standard XML editor. Unlike many other text based formats however there is no way you can corrupt the data using an XML editor. The editor can be made to ensure that any data which is created or modified complies with the DTD.

It is also not difficult to create a graphical editor for GML and such products are expected to appear on the market within the coming year. Again the GML DTD can be used to ensure data integrity. Note that when one edits GML graphically an intermediate graphic representation is required (perhaps SVG) which is then used to define the geometry of the associated GML feature. We will have more to say on this subject in our up coming article on Making Maps from GML to appear on the GeoJava site.

3.4 GML can readily Integrate with Non-Spatial Data

Binary data structures are typically very difficult to integrate with one another. A classic example is that of associating a text document, or a parameter list, with a separately developed and maintained spatial database of parcels or land tenure boundaries. With a binary data structure one must understand the file structure or database schema and be able to modify it. In many legacy systems using flat files the data structure cannot be modified without breaking the applications which rely on the existing data structure. With GML it is comparatively easy to provide links to other XML data elements and this will dramatically improve with the introduction of XLink and XPointer. Even links to non-XML elements can be readily handled using the well established URI syntax.

3.5 GML is Transformable

The most important aspect of XML in our view is its transformability. It is quite easy to write a transformation which carries XML data relative to one DTD to XML relative to another. This is exactly what we do when we generate an SVG graphical element stream from a GML data file. Such transformations can be accomplished using a variety of mechanisms including XSLT, Java, Javascript and C++ to name only a few. XSLT in our view is of particular interest. With XSLT it is very easy to write a style sheet which locates and transforms GML elements into other XML elements. Where XSLT is not up to the task, one can readily incorporate XSLT extension functions written in Java or VB (the exact languages supported depends on the implementation) to perform tasks such as string manipulation or mathematical computation. XSLT can also make use of powerful searching syntax (XPath/XQL) so as to retrieve elements that satisfy complex boolean expressions on the elements and their attributes. Using these techniques an XSLT style sheet can perform a wide variety of querying, analysis and transformation functions. Consider the following examples:

Using XSLT with suitable extension functions we can extract spatial elements which satisfy various spatial and attribute queries. Galdos Systems Inc will be providing just such a set of spatial extension functions in the near future on the GeoJava site. Using these functions it will be straightforward to write a spatial query that extracts features of a given type which lie within a specified region or which intersect a particular feature.

Change the XSLT style sheet and we can accomplish a totally different function. We can for example write a style sheet that performs coordinate transformation as was demonstrated in the OGC WMT IOC in Washington, September 10, 1999. This immediately provides us with a coordinate transformation service. Locate GML data in one part of the world in reference system X and simply pass its URI to the service and specify the target reference system, and presto you will have GML in the new frame of reference. Look on the GeoJava site for upcoming coordinate transformation service for GML data.

Change the XSLT style sheet and we can accomplish yet another function. We can for example generate an SVG, VML or X3D map on the server. Select different style sheets for different viewing devices or different types of maps.

The transformability of GML also means that we can readily construct application specific indexes or at least we will be able to once XLink and XPointer implementations start to move toward reality. Look for this to have a huge impact on the utility of GML data sets.

3.6 GML can Transport Behaviour

XML is a language for describing data description languages. GML does not itself encode behaviour. GML can, however, be used in conjunction with languages like Java or C++ to in effect transport geographic behaviour from one place to another. This can be done using a simple object factory which instantiates objects based on received GML data, mapping the GML element names into object classes. In the Java case this would mean mapping the GML elements into Java classes as listed in the OGC Java Simple Features RFC. This "re-hydration" of the GML data then creates Java objects which have the OGC interfaces for Simple Features (of course we did not transport the interfaces). GML and Java (or COM or CORBA) Simple Features can thus get along very well with one another. In many applications one only needs the behaviour for a small number of the elements. With this approach one might receive 10,000 GML elements but only need to construct a hundred or so Java objects on an as needed basis.

4.0 What's Coming Down the Road ?

I think we have made it pretty clear that we think GML is pretty cool. Once you have had the opportunity to play with it you will think it is pretty cool as well. Over the next 6 months a series of articles and services extending your understanding of GML, and how to apply it in real world problems, will appear on the GeoJava website. Look for articles on Map Making, Making maps in SVG, Geographic Transformations, GML Spatial databases, Mobile applications and much more.

What will happen to GML itself ? We expect quite a lot. The current version of GML is based on linear geometry and provide no notions of topology. Over the next several months, new versions of GML will be introduced adding topology, non-linear feature geometries, 21/2 and 3D geometry, support for OGC Coverages, XSLT spatial query extension functions, XLink/XPointer support, and an XML Schema implementation.

GML is a powerful new way to look at spatial information using XML encoding. It promises. however, much more than a mere encoding standard. The inherent transformability and accessibility of GML will open a whole new domain in geo-spatial information management.


How to convert a String to OpenLayers.Geometry.Polygon using javascript? - Geographic Information Systems

Wicket is a lightweight library for translating between Well-Known Text (WKT) and various client-side mapping frameworks:

  • Leaflet (demo)
  • Google Maps API (demo)
  • ESRI ArcGIS JavaScript API (demo)
  • Potentially any other web mapping framework through serialization and de-serialization of GeoJSON (with JSON.parse )

The core Wicket library and the Leaflet extension are both compatible with Node.js the Google Maps and ArcGIS API extensions will not work in Node.js because they require a browser.

If you are looking for Apache Wicket, the web-app development framework for Java, you'll find it here.

Wicket is released under the GNU General Public License version 3 (GPLv3). Accordingly:

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

The following examples work in any of the mapping environments, as Wicket has a uniform API regardless of the client-side mapping library you're using.

Wicket will read from the geometry objects of any mapping client it understands. Observação: Don't use the deconstruct() method! This is used internally by Wkt.Wkt() instances. Use fromObject() instead, as in the following example.

Dependencies and Build Information

Wicket has zero dependencies, however, JSON parsing (from strings) is not provided. Wicket looks for the function JSON.parse , which is provided in most modern browsers (get it with this library, if you need to support older browsers).

Minified versions can be generated via:

Read the documentation here. Documentation can be generated with JSDoc 3.

Either way, make sure you invoke jsdoc from a directory in which you have write access it will output documentation to your current working directory.

Wicket was created out of the need for a lightweight Javascript library that can translate Well-Known Text (WKT) strings into geographic features. This problem arose in the context of OpenClimateGIS, a web framework for accessing and subsetting online climate data.

OpenClimateGIS emits WKT representations of user-defined geometry. The API Explorer allowed users to define arbitrary areas-of-interest (AOIs) and view predefined AOIs on a Google Maps API instance. So, initially, the problem was converting between WKT strings and Google Maps API features. While other mapping libraries, such as OpenLayers, have very nice WKT libraries built-in, the Google Maps API, as of this writing, does not. In the (apparent) absence of a lightweight, easy-to-use WKT library in Javascript, I set out to create one.

That is what Wicket aspires to be: lightweight, framework-agnostic, and useful. I hope it achieves these goals. If you find it isn't living up to that and you have ideas on how to improve it, please fork the code or drop me a line.

Wicket borrows heavily from the experiences of others who came before us:

  • The OpenLayers 2.7 WKT module (OpenLayers.Format.WKT)
  • Chris Pietshmann's article on converting Bing Maps shapes (VEShape) to WKT
  • Charles R. Schmidt's and the Python Spatial Analysis Laboratory's (PySAL) WKT writer

The base library, wicket.js, contains the Wkt.Wkt base object. This object doesn't do anything on its own except read in WKT strings, allow the underlying geometry to be manipulated programmatically, and write WKT strings. By loading additional libraries, such as wicket-gmap3.js, users can transform between between WKT and the features of a given framework (e.g. google.maps.Polygon instances). The intent is to add support for new frameworks as additional Javascript files that alter the Wkt.Wkt prototype.

To extend Wicket, nominally by writing bindings for a new mapping library, add a new file with a name like wicket-libname.src.js (and corresponding minified version wicket-libname.js) where "libname" is some reasonably short, well-known name for the mapping library.

WKT geometries are stored internally using the following convention. The atomic unit of geometry is the coordinate pair (e.g. latitude and longitude) which is represented by an Object with x and y properties. An Array with a single coordinate pair represents a a single point (i.e. POINT feature):

An Array of multiple points (an Array of Arrays) specifies a "collection" of points (i.e. a MULTIPOINT feature):

An Array of multiple coordinates specifies a collection of connected points in an ordered sequence (i.e. LINESTRING feature):

An Array can also contain other Arrays. In these cases, the contained Array(s) can each represent one of two geometry types. The contained Array might reprsent a single polygon (i.e. POLYGON feature):

The above example cannot represent a LINESTRING feature (one of the few type-based constraints on the internal representations), however it may represent a MULTILINESTRING feature. Both POLYGON and MULTILINESTRING features are internally represented the same way. The difference between the two is specified elsewhere (in the Wkt instance's type) and must be retained. In this particular example (above), we can see that the first coordinate in the Array is repeated at the end, meaning that the geometry is closed. We can therefore infer it represents a POLYGON and not a MULTILINESTRING even before we plot it. Wicket retains the modelo of the feature and will always remember which it is.

Similarly, multiple nested Arrays might reprsent a MULTIPOLYGON feature:

Or a POLYGON with inner rings (holes) in it where the outer ring is the polygon envelope and comes first subsequent Arrays are inner rings (holes):

Or they might represent a MULTILINESTRING where each nested Array is a different LINESTRING in the collection. Again, Wicket remembers the correct modelo of feature even though the internal representation is ambiguous.


Resource file naming

Resources are named for the full type name of their class minus the assembly name. For example, a French resource in a project whose main assembly is LocalizationWebsite.Web.dll for the class LocalizationWebsite.Web.Startup would be named Startup.fr.resx. A resource for the class LocalizationWebsite.Web.Controllers.HomeController would be named Controllers.HomeController.fr.resx. If your targeted class's namespace isn't the same as the assembly name you will need the full type name. For example, in the sample project a resource for the type ExtraNamespace.Tools would be named ExtraNamespace.Tools.fr.resx.

In the sample project, the ConfigureServices method sets the ResourcesPath to "Resources", so the project relative path for the home controller's French resource file is Resources/Controllers.HomeController.fr.resx. Alternatively, you can use folders to organize resource files. For the home controller, the path would be Resources/Controllers/HomeController.fr.resx. If you don't use the ResourcesPath option, the .resx file would go in the project base directory. The resource file for HomeController would be named Controllers.HomeController.fr.resx. The choice of using the dot or path naming convention depends on how you want to organize your resource files.

Resource name Dot or path naming
Resources/Controllers.HomeController.fr.resx Dot
Resources/Controllers/HomeController.fr.resx Path

Resource files using @inject IViewLocalizer in Razor views follow a similar pattern. The resource file for a view can be named using either dot naming or path naming. Razor view resource files mimic the path of their associated view file. Assuming we set the ResourcesPath to "Resources", the French resource file associated with the Views/Home/About.cshtml view could be either of the following:

If you don't use the ResourcesPath option, the .resx file for a view would be located in the same folder as the view.

RootNamespaceAttribute

The RootNamespaceAttribute attribute provides the root namespace of an assembly when the root namespace of an assembly is different than the assembly name.

This can occur when a project's name is not a valid .NET identifier. For instance my-project-name.csproj will use the root namespace my_project_name and the assembly name my-project-name leading to this error.

If the root namespace of an assembly is different than the assembly name:

  • Localization does not work by default.
  • Localization fails due to the way resources are searched for within the assembly. RootNamespace is a build-time value which is not available to the executing process.

If the RootNamespace is different from the AssemblyName , include the following in AssemblyInfo.cs (with parameter values replaced with the actual values):

The preceding code enables the successful resolution of resx files.


In a new short series of posts, we highlight some of the useful tools and techniques for developers and designers. Recently we’ve covered HTML Emails and SVG Generators. This time we look into different kinds of tools to help you streamline your accessibility testing process. Don’t miss the next one.

Smashing Magazine is so much more than articles.

14 printed books e 67 eBooks. Written for web developers, designers and marketeers.

Jump to books ↬ Free airmail shipping wordlwide. No ifs or buts.

Online workshops with experts. Broken into 2.5h-segments, with interactive, live sessions.

Helping designers and developers find great jobs, and connect with great companies.

A friendly community for people who design and build the web. With discounts, goodies and fancy cats.

Weekly tips on front-end & UX, delivered straight to your inbox. Just practical stuff that you can use.


In this HTML vs HTML5 article, we’ve learned the key features that distinguish HTML5 with its predecessor.

First, HTML5 enhanced tons of areas that its older version was lacking. It supports both video and audio embedding via <audio> e <video> tags, gives full support for JavaScript to run in the background, provides multiple new elements, like date, datalist, summary, etc., and has better compatibility with improved parsing rules.

Second, from a developer standpoint, HTML5 presents improvement in many areas, including persistent error handling, semantics elements, support for web application and mobile usage, utilization for <canvas> element, etc.

Finally, considering how convenient the use of HTML5 in modern-day web technology, we can safely assume that the adoption of this markup language will increase even more rapidly in the years to come.

It’s of paramount importance for you to learn about HTML5 as quickly as possible to maximize the potential of modern-day browsers. We hope that this HTML vs HTML5 article is of help. Best of Luck!

Domantas leads the content and SEO teams forward with fresh ideas and out of the box approaches. Armed with extensive SEO and marketing knowledge, he aims to spread the word of Hostinger to every corner of the world. During his free time, Domantas likes to hone his web development skills and travel to exotic places.