Mais

Converter Multipolygon Geojson em vários polígonos geojson?

Converter Multipolygon Geojson em vários polígonos geojson?


Eu vejo muitas perguntas vindo dePolígonosparaMultiPolygon, mas existe alguma maneira fácil de fazer o contrário? Também seria útil preservar os atributos doMultiPolygonpara aplicar ao novoPolígonos.


Se você tiver um multipolígono simples como o mostrado abaixo,

mp = {"tipo": "MultiPolygon", "coordenadas": [[[[-99,028, 46,985], [-99,028, 50,979], [-82,062, 50,979], [-82,062, 47,002], [-99,028, 46,985]]], [[[-109,028, 36,985], [-109,028, 40,979], [-102,062, 40,979], [-102,062, 37,002], [-109,028, 36,985]]]]}

em seguida, usando Javascript / Nodejs, você pode acessar cada polígono constituinte usando forEach e escrever um novo polígono usando JSON.stringify

mp.coordinates.forEach (function (coords) {var feat = {'type': 'Polygon', 'coordinates': coords}; console.log (JSON.stringify (feat));});

Você também pode acessá-los diretamente em um loop, se preferir uma forma menos funcional, indexada em mp.coordinates.length, por exemplo,

para (var i = 0; i

Se você está lidando com um FeatureCollection, onde você pode ter um array de recursos, cada um contendo um MultiPolygon, por exemplo,

mp = {"type": "FeatureCollection", "features": [{"type": "Feature", "geometry": {"type": "MultiPolygon", "coordinates": [[[[100.0, 0.0] , [101,0, 0,0], [101,0, 1,0], [100,0, 1,0], [100,0, 0,0]]], [[[0,0, 0,0], [1,0, 0,0], [1,0, 1,0], [0,0, 1.0], [0.0, 0.0]]]]}, "propriedades": {"prop1": {"este": "aquele"}, "prop0": "valor0"}}]}

Em seguida, você pode usar forEach para obter cada recurso e, em seguida, acessar cada polígono dentro de cada multipolígono simplesmente percorrendo a matriz, pois a primeira dimensão da matriz de coordenadas é o índice de cada polígono. Observe, você também pode salvar as propriedades e atribuí-las a cada novo recurso do polígono.

mp.features.forEach (function (feat) {var geom = feat.geometry; var props = feat.properties; if (geom.type === 'MultiPolygon') {for (var i = 0; i 

Se você quiser algo mais sofisticado, poderá modificar a classe OpenLayers.Format.GeoJSON.


Índice espacial RavenDB não está sendo construído

Importei geodados com êxito para uma classe que denominei AdministrativeArea, que contém - entre outros - um campo WKT. Este campo contém os pontos de coordenadas do polígono para longitude e latitude. Eu declarei isso como uma string. Gostaria de consultar os documentos para descobrir quais dos meus polígonos / áreas geográficas estão contidos em um determinado retângulo delimitador. Para fazer isso, criei um índice usando o recurso espacial. Algo parece estar "desligado" com este índice ou com a forma como o estou construindo: ou a contagem do índice está parada em 0 e nada mais acontece ou começa a construir, mas fica presa em um número aleatório e recebo um erro mensagem. Alguém pode ajudar?

Veja como procuro áreas:

. e um exemplo de JSON (há

A propósito: existem centenas, senão milhares de pontos lat / lng dentro de cada uma das 260.000 áreas (eu cortei cerca de 90% das coordenadas no exemplo acima por razões de espaço). Talvez minha abordagem não seja a certa para este caso?

O comportamento de indexação do RavenDB é muito estranho para isso: parece ficar "preso" na tarefa de indexação (a CPU está entre 20% e 40 $, e o consumo de RAM aumenta de forma consistente, mas lentamente), mas nenhuma nova entrada de índice é criada, e nenhuma mensagem de erro aparece. Estou executando isso em um laptop com 16 GB de RAM e um i7 com