Mais

Biblioteca Java para leitura de geojson do MySQL

Biblioteca Java para leitura de geojson do MySQL


Estou procurando uma maneira de recuperarmysqlgeometriadados comogeojsondo banco de dados usando umJavabiblioteca ou para converterwktparageojsonusando qualquer umJavaoujavascript.

Atualmente estou fazendo muita manipulação de string e correspondência de expressão regular para fazer isso. Estou usando oAPI Javascript V3 do Google Mapscomo a solução de mapeamento.

Minha configuração é muito simples, eu usoServlets Javapara carregar páginas JSP e receber solicitações AJAX. Eu escrevo e leio dados de uma coluna do tipogeometriausando ummysqlbanco de dados usandoInnoDBcomo meu mecanismo de mapeamento. Estou usando oconector mysqlpara inserir / consultar dados dobase de dadosusandoJava.Eu uso oDadoscamada emAPI Javascript do Google Maps v3para renderizar dados comogeojson.

Agradecemos antecipadamente por sua ajuda.


Para sua informação, o suporte GeoJSON é um dos novos recursos do MySQL 5.7.5, que deve ser lançado em breve, eu acho. Consulte http://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-5.html para obter mais informações.


Respondendo minha própria pergunta:

Isso analisa instruções individuais, não várias instruções, como as encontradas em um esquema. Portanto, divida o esquema em ''. Ele também não gosta do caractere '`', então eles precisam ser removidos. Código para obter nomes de coluna para uma tabela específica:

Você pode querer considerar o uso de código do projeto Druid do Alibaba. Embora projetado como uma biblioteca de pool de conexão sofisticada, este projeto oferece suporte a um analisador muito avançado e AST para ANSI SQL e dialetos não ANSI, como MySQL, Oracle, SQL Server, etc. 2.0.

Os principais pontos de entrada nesta parte da biblioteca é SQLUtils.java. Você pode usar os valores retornados de SQLUtils.parseStatements para acessar um modelo digitado das instruções:

Por que não apenas usar DatabaseMetaData para descobrir as tabelas e colunas? Isso presume que o esquema expresso em SQL foi executado no banco de dados ao qual você está conectado, mas essa não é uma suposição difícil de satisfazer.

O MySQL pode simplesmente importar os dados se você os tiver no formato CSV. Eu me aprofundaria nas ferramentas MySQL antes de escrever o código Java para fazer isso. Se isso não funcionar, eu encontraria uma ferramenta ETL para me ajudar. Escrever Java seria minha solução de último recurso.


Jackson desserializa GeoJson Point em Spring Boot

Eu tenho um modelo @Entity que tem uma propriedade do tipo com.vividsolutions.jts.geom.Point. Quando tento renderizar este modelo em um @RestController, recebo uma exceção de recursão.

A entidade tem esta aparência (abreviada para abreviar):

Depois de alguma pesquisa, descobri que isso ocorre porque Jackson não pode desserializar GeoJson por padrão. Adicionar esta biblioteca deve resolver o problema: https://github.com/bedatadriven/jackson-datatype-jts.

Agora não tenho certeza de como incluir este módulo no mapeador de objetos na inicialização do Spring. De acordo com a documentação do boot, tentei adicioná-lo ao @Configuration das duas maneiras a seguir:

Ambos não removeram a exceção. Sry se esta é uma duplicata, mas tudo o que consegui encontrar SO foi customizar o ObjectMapper que, no meu entendimento da documentação, não é o "método de inicialização com mola".

Como solução alternativa, estou @JsonIgnore ing the Point e tenho getters e setters personalizados para um objeto coordenado inexistente. mas não é assim que eu gostaria de mantê-lo.


Biblioteca Java para leitura de geojson do MySQL - Sistemas de Informação Geográfica

Um aplicativo que utiliza e demonstra a funcionalidade nas bibliotecas móveis GeoPackage.

Android - um aplicativo Android que pode ser criado e instalado a partir do Android Studio ou diretamente do APK.

iOS - Um aplicativo iOS que pode ser construído e instalado a partir do Xcode.

Um SDK certificado OGC que fornece a capacidade de gerenciar arquivos GeoPackage fornecendo suporte de leitura, gravação, importação, exportação, compartilhamento e abertura. Os arquivos Open GeoPackage fornecem acesso de leitura e gravação a recursos e blocos.

Java - Uma biblioteca Java que fornece funcionalidade GeoPackage e ferramentas de linha de comando. Baseia-se no Core Java.

Android - um Android SDK que fornece funcionalidade e utilitários GeoPackage para aplicativos Android. Baseia-se no Core Java.

Android Map - Um Android Map SDK que fornece implementações de biblioteca de mapas do Google, além da funcionalidade de base do GeoPackage Android herdada.

iOS - Um SDK do iOS que fornece funcionalidade e utilitários do GeoPackage para aplicativos iOS.

JS - Uma biblioteca JavaScript que fornece funcionalidade e utilitários GeoPackage para aplicativos de nó e da web.

Core Java - uma biblioteca não autônoma que fornece a funcionalidade principal do GeoPackage para as bibliotecas Java e Android.

Extensões NGA - extensões NGA para a especificação GeoPackage conforme definido pelo mecanismo de extensão OGC GeoPackage e definido usando o modelo de extensão.

SQLite Exec - utilitário de comando que executa instruções SQL em um banco de dados SQLite, incluindo GeoPackages.

Bibliotecas baseadas no padrão OGC Simple Feature Access (não específico do GeoPackage).

Recursos simples Java - biblioteca base de objetos e utilitários de geometria.

Simple Features Well-Known Binary Java - Biblioteca para escrever e ler Simple Feature Geometries de e para o Well-Known Binary.

Recursos simples Texto conhecido Java - Biblioteca para escrever e ler geometrias de recursos simples de e para texto conhecido.

Recursos simples GeoJSON Java - Biblioteca para escrever e ler geometrias de recursos simples de e para o GeoJSON.

Simple Features Projection Java - Biblioteca para realizar conversões de projeção entre Simple Feature Geometries.

Recursos simples iOS - biblioteca base de objetos e utilitários de geometria.

Simple Features Well-Known Binary iOS - Biblioteca para escrever e ler Simple Feature Geometries de e para Well-Known Binary.

Recursos simples Texto conhecido iOS - Biblioteca para escrever e ler geometrias de recursos simples de e para texto conhecido.

Recursos simples GeoJSON iOS - Biblioteca para escrever e ler geometrias de recursos simples de e para o GeoJSON.

Projeção de recursos simples iOS - Biblioteca para realizar conversões de projeção entre geometrias de recursos simples.

Biblioteca para realizar conversões de projeção entre coordenadas (não específico do GeoPackage).

Sistemas de Referência de Coordenadas

Biblioteca para ler e gravar arquivos de formato de arquivo de imagem tag (não específico do GeoPackage).

Java - Uma biblioteca Java que fornece funcionalidade de formato de arquivo de imagem marcada.

iOS - uma biblioteca do iOS que fornece a funcionalidade Tagged Image File Format.

Bibliotecas baseadas na especificação OGC API (não específica do GeoPackage).

Recursos JSON Java - Uma biblioteca Java para escrever e ler OGC API - Recursos de e para JSON.

Recursos JSON iOS - Uma biblioteca iOS para escrever e ler OGC API - Recursos de e para JSON.


Deve ser rs.getString, porque getString usado com VARCHAR, TEXT, podemos considerar JSon como um tipo String, então você pode obter o resultado, usando getString.

Exemplo Simples

Verifique novamente com MySQL 5.7 e PostgreSQL 9.4:

MySQL 5.7 SQL

Caso alguém ainda esteja procurando, eu estava tentando com o Mysql 5.7, mas os métodos sugeridos acima não lidam muito bem com dados não ASCII, muitos caracteres asiáticos etc.). Eles acabam sendo exibidos como truncados.

A solução é ler os bytes brutos usando getBinaryStream. O código é demonstrado abaixo:

O texto acima pode ser encapsulado em uma função de JSON e amplamente usado. por exemplo

Caso o JDBC não seja um requisito difícil, as versões recentes do jOOQ implementaram uma maneira pronta para o uso de mapear valores SQL JSON para tipos arbitrários de Java usando as populares bibliotecas de mapeamento JSON Jackson ou gson (o que puder ser encontrado em seu classpath) . Você pode então escrever:

Supondo que seu JSON_COLUMN contenha dados do formulário:

Isso também funciona com todas as funções SQL / JSON com suporte nativo, para criar tais documentos JSON em tempo real.


Biblioteca Java para leitura de geojson do MySQL - Sistemas de Informação Geográfica

Converter Kml para o formato GeoJSON

Esta aplicação KmlToGeojson, converte arquivos Kml e Kmz em uma representação GeoJSON.

Kml é usado no Google Earth para exibir vários elementos geográficos, como imagens, marcas de lugar, formas poligonais e assim por diante.

Da mesma forma, GeoJSON é um formato para codificar uma variedade de estruturas de dados geográficos.

Este aplicativo scala usa a biblioteca scalakml e a biblioteca play-geojson para converter Kml para o formato GeoJSON.

Atualmente, o seguinte mapeamento está implementado.

As "propriedades" do recurso GeoJSON são geradas a partir dos seguintes elementos Kml:

O atributo Kml "id" é convertido no recurso GeoJSON "id".

Todo o resto é ignorado.

Apenas o sistema de referência de coordenadas WGS84 é suportado e todas as longitudes e latitudes estão em graus decimais.

Instalação e embalagem

A maneira mais fácil de compilar e empacotar o aplicativo a partir do código-fonte é usar o SBT. Para empacotar o aplicativo e todas as suas dependências em um único tipo de arquivo jar:

Isso produzirá "kmltogeojson-1.2.jar" no diretório "./target/scala-2.13".

Por conveniência um kmltogeojson-1.2.jar arquivo está no diretório "distrib" pronto para uso.

Assim que tiver o arquivo jar, simplesmente digite no prompt:

onde "kml_file.kml" é o arquivo Kml que você deseja converter e "geojson_file.geojson" é o arquivo de destino com os resultados do formato GeoJSON. Se "geojson_file.geojson" estiver ausente, a saída será direcionada ao console.

Você também pode usar essa biblioteca em seu código scala. Primeiro, adicione a seguinte dependência ao seu arquivo build.sbt:

O KmlConverter.scala tem um método genérico toGeoJson () que pega qualquer um dos objetos Kml implementados. Veja também "TestGeoJson".

Depende da biblioteca scala scalakml e da biblioteca scala play-geojson.


Caminhos JSON

Um caminho JSON tem como alvo valores e pode ser usado para extrair ou modificar partes de um documento JSON. A função JSON_EXTRACT () demonstra isso extraindo um ou mais valores:

Todas as definições de caminho começam com $ seguido por outros seletores:

  • um ponto seguido por um nome, como $ .website
  • [N] onde N é a posição em uma matriz indexada por zero
  • o curinga. [*] avalia todos os membros de um objeto
  • o curinga [*] avalia todos os membros de uma matriz
  • o prefixo ** sufixo curinga avalia todos os caminhos que começam com o prefixo nomeado e terminam com o sufixo nomeado

Os exemplos a seguir referem-se ao seguinte documento JSON:

  • $ .a retorna 1
  • $ .c retorna [3, 4]
  • $ .c [1] retorna 4
  • $ .d.e retorna 5
  • $ **. e retorna [5]

Definir um limite de tempo para uma transação no MySQL / InnoDB

Isso surgiu desta questão relacionada, onde eu queria saber como forçar duas transações a ocorrerem sequencialmente em um caso trivial (onde ambas estão operando em apenas uma única linha). Recebi uma resposta - use SELECT. FOR UPDATE como a primeira linha de ambas as transações, mas isso leva a um problema: Se a primeira transação nunca for confirmada ou revertida, a segunda transação será bloqueada indefinidamente. A variável innodb_lock_wait_timeout define o número de segundos após o qual o cliente tentando fazer a segunda transação seria informado "Desculpe, tente novamente". mas pelo que posso dizer, eles tentariam novamente até a próxima reinicialização do servidor. Então:

  1. Certamente deve haver uma maneira de forçar um ROLLBACK se uma transação está demorando uma eternidade? Devo recorrer ao uso de um daemon para eliminar essas transações e, em caso afirmativo, como seria esse daemon?
  2. Se uma conexão for interrompida por wait_timeout ou interativo_timeout no meio da transação, a transação será revertida? Existe uma maneira de testar isso no console?

Esclarecimento: innodb_lock_wait_timeout define o número de segundos que uma transação irá esperar até que um bloqueio seja liberado antes de desistir do que eu quero é uma forma de forçando um bloqueio a ser liberado.

Atualização 1: Aqui está um exemplo simples que demonstra por que innodb_lock_wait_timeout não é suficiente para garantir que a segunda transação não seja bloqueada pela primeira:

Com a configuração padrão de innodb_lock_wait_timeout = 50, esta transação é concluída sem erros após 55 segundos. E se você adicionar um UPDATE antes da linha SLEEP, então inicie uma segunda transação de outro cliente que tenta SELECIONAR. FOR UPDATE na mesma linha, é a segunda transação que atinge o tempo limite, não aquela que adormeceu.

O que procuro é uma forma de pôr fim ao sono reparador desta transação.

Atualização 2: Em resposta às preocupações de hobodave sobre o quão realista é o exemplo acima, aqui está um cenário alternativo: Um DBA se conecta a um servidor ativo e executa

onde a segunda linha bloqueia uma linha na qual o aplicativo grava com frequência. Em seguida, o DBA é interrompido e vai embora, esquecendo-se de encerrar a transação. O aplicativo pára até que a linha seja desbloqueada. Eu gostaria de minimizar o tempo que o aplicativo fica travado como resultado desse erro.


Para ler JSON do arquivo, usaremos o arquivo JSON que criamos no exemplo anterior.

  1. Em primeiro lugar, criaremos uma instância JSONParser para analisar arquivo JSON.
  2. Use FileReader para ler o arquivo JSON e passá-lo para o analisador.
  3. Comece a ler os objetos JSON um por um, com base em seu tipo, ou seja, JSONArray e JSONObject.

Compartilhar isso:

Sobre Lokesh Gupta

Um cara de família com diversão amando a natureza. Adoro computadores, programar e resolver problemas do dia a dia. Encontre-me no Facebook e Twitter.

Feedback, discussão e comentários

Eu segui exatamente como você mencionou no artigo. mas estava recebendo erros. a seguir está o trecho de código

a seguir estão os logs de erro

Exceção no thread & # 8220main & # 8221 java.lang.StackOverflowError
em java.base / java.lang.AbstractStringBuilder.append (AbstractStringBuilder.java:748)
em java.base / java.lang.StringBuffer.append (StringBuffer.java:424)
em org.json.simple.JSONValue.escape (JSONValue.java:266)
em org.json.simple.JSONObject.toJSONString (JSONObject.java:116)
em org.json.simple.JSONObject.toJSONString (JSONObject.java:101)
em org.json.simple.JSONObject.toJSONString (JSONObject.java:108)
…..
e uma longa lista semelhante de erros

Tive que fazer algumas alterações para compilar, a saber:

em vez de lançar diretamente como mostrado no exemplo aqui

Eu segui o exemplo acima, mas o arquivo JSON gravado não tem indentações. Estou fazendo algo errado?

Olá,
Como posso atualizar apenas um valor de entidade no arquivo json?
Por exemplo,
Eu tenho um arquivo json com todos os dados e
Tenho que mudar o & # 8220primeiro nome & # 8221: & # 8220lokesh & # 8221
a algum outro valor armazenado em uma string.
Como posso escrever este valor em meu arquivo json usando java
Por favor ajude.
Obrigado

Olá, como faço isso com um arquivo json de 500 GB (wikidata)?

Como você pode analisar um objeto FileReader? O que é um objeto FileReader?
Em comparação, quero ler um arquivo JSON, torná-lo em string e, então, saber como lidar com isso, mas meu método de análise não aceitará um FileReader.


Então, por exemplo, você pode escrever seu próprio gatilho chamando o sys_exec assim:

O resultado contém o código de saída do programa externo

Existem outras funções úteis nesta biblioteca:

  • sys_eval : executa um comando arbitrário e retorna sua saída.
  • sys_get : obtém o valor de uma variável de ambiente
  • sys_set : crie uma variável de ambiente ou atualize o valor de uma variável de ambiente existente
  • sys_exec : executa um comando arbitrário e retorna seu código de saída

Tenha muito cuidado ao decidir se você precisa desta função. UDFs estão disponíveis para todos os usuários do banco de dados - você não pode conceder privilégios EXECUTE para eles. Como a string de comando passada para sys_exec pode fazer quase tudo, expor a função representa um aspecto muito real perigo de segurança.