Mais

Criando um círculo com raio em metros


Estou usando shapely e Python.

Como devo proceder para criar um círculo usando shapely cujo raio está em metros?

Se eu usar

sampleCircle = Point (1,1) .buffer (1) print sampleCircle.area

Isso retorna uma área de 3,13654849055. Como posso interpretar a unidade desta área? Eu li que isso pode ser interpretado em graus quadrados, mas procuro um pouco mais de explicação.

Além disso, como faço para criar um círculo com um raio especificado (em metros) em torno de um ponto (definido usando lat, long)?

O artigo mais próximo que encontrei foi este [http://comments.gmane.org/gmane.comp.python.gis/1582], mas carece de qualquer solução concreta


Por design, Shapely não tem conhecimento de sistemas ou unidades de referência de coordenadas. Para usá-lo para resolver problemas do mundo real, você deve aprender a transformar longitude e latitude em um sistema de referência local aproximadamente plano (como um avião estadual dos EUA) e deve manter o controle de suas próprias unidades. Eu uso o pyproj para fazer isso, mas você pode usar o que quiser. Depois de transformar seus graus de latitude e longitude em x e y metros,Point (x, y) .buffer (1.0) .areaé a área em m ^ 2 do seu círculo (polígono de 64 lados para ser mais preciso).


Com base no link que você forneceu (quase todo o trabalho é feito lá), você pode obter um polígono que representa esse círculo (polígono de 64 lados).

from functools import parcial pyproj from shapely import geometry from shapely.geometry import Point from shapely.ops import transform lon, lat = -122.431297, 37.773972 # lon lat para San Francisco radius = 10000 # em m local_azimuthal_projection = "+ proj = aeqd + R = 6371000 + unidades = m + lat_0 = {} + lon_0 = {} ". Formato (lat, lon) wgs84_to_aeqd = parcial (pyproj.transform, pyproj.Proj (" + proj = longlat + datum = WGS84 + no_defs ") , pyproj.Proj (local_azimuthal_projection),) aeqd_to_wgs84 = parcial (pyproj.transform, pyproj.Proj (local_azimuthal_projection), pyproj.Proj ("+ proj = longlat + datum = WGS84 + no_defs"),) ), float (lat)) point_transformed = transform (wgs84_to_aeqd, center) buffer = point_transformed.buffer (radius) # Obtenha o polígono com as coordenadas lat lon circle_poly = transform (aeqd_to_wgs84, buffer)


Assista o vídeo: Okrąg i koło - wprowadzenie #1 Koła i okręgi (Outubro 2021).