2017-06-20 4 views
2

S2Regionとはどのようにしてs2セルを特定の親レベル9)は、与えられた緯度、経度、および半径から引かれた円によって覆われています。以下は、すべてのセルを矩形の下に置くためにpython s2ライブラリを使用する例です。例http://blog.christianperone.com/2015/08/googles-s2-geometry-on-the-sphere-cells-and-hilbert-curve/Python S2/S2sphereライブラリを使用する - 特定のレベルのすべてのs2セルを円で見つける(緯度、経度、半径が指定されています)

region_rect = S2LatLngRect(
       S2LatLng.FromDegrees(-51.264871, -30.241701), 
       S2LatLng.FromDegrees(-51.04618, -30.000003)) 
coverer = S2RegionCoverer() 
coverer.set_min_level(8) 
coverer.set_max_level(15) 
coverer.set_max_cells(500) 
covering = coverer.GetCovering(region_rect) 

ソースは、私がUsing google s2 library - find all s2 cells of a certain level within the circle, given lat/lng and radius in miles/km C++で実装グーグルS2ライブラリのため、この質問の答えを見つけることが、私はPythonでこれを必要と

region_circle = S2latLangCircle(lat,lang,radius) 

ような何かを探しています。 linkの助けを借りて

おかげ

答えて

1

は、私はPythonの解決のために働きました。

私はpython s2sphereライブラリを使用しています。

earthCircumferenceMeters = 1000 * 40075.017 
def earthMetersToRadians(meters): 
    return (2 * math.pi) * (float(meters)/
    const.earthCircumferenceMeters) 


def getCoveringRect(lat, lng, radius, parent_level): 
    radius_radians = earthMetersToRadians(radius) 
    latlng = LatLng.from_degrees(float(lat), 
      float(lng)).normalized().to_point() 
    region = Cap.from_axis_height(latlng, 
    (radius_radians*radius_radians)/2) 
    coverer = RegionCoverer() 
    coverer.min_level = int(parent_level) 
    coverer.max_level = int(parent_level) 
    coverer.max_cells = const.MAX_S2_CELLS 
    covering = coverer.get_covering(region) 
    s2_rect = [] 
    for cell_id in covering: 
    new_cell = Cell(cell_id) 
    vertices = [] 
    for i in range(4): 
     vertex = new_cell.get_vertex(i) 
     latlng = LatLng.from_point(vertex) 
     vertices.append((math.degrees(latlng.lat().radians), 
         math.degrees(latlng.lng().radians))) 
    s2_rect.append(vertices) 
    return s2_rect 

getCoveringRect方法は長い中心と所定の半径

として、所与の緯度から描かれた円によって覆われ、所与の親レベルですべてのS2細胞(長方形の境界)を返します
関連する問題