Carmen으로 지오코더 만들기

이 기사는 FOSS4G Advent Calendar 2019의 25 일째 기사입니다.

소개



Carmen국토 수치 정보의 행정 구역 데이터을 사용하여 지오코더를 만들었습니다.

Carmen이란?



벡터 타일 ( MVT ) 기반 지오코더입니다. Mapbox Geocoding API는 이것을 사용하여 구현됩니다.

샘플



포워드 지오코딩



22시~9시 사이는 정지합니다.또, 시기를 보고 예고 없이 닫습니다, 양해 바랍니다


매개변수


  • access_token
  • 인증용. 여기서 무시해도 괜찮습니다

  • q
  • Forwad Geocoding하고 싶은 지명


  • 출력 결과(GeoJSON)


    {
      "type": "FeatureCollection",
      "query": [
        "大",
        "磯",
        "町"
      ],
      "features": [
        {
          "id": "data.771",
          "type": "Feature",
          "place_type": [
            "data"
          ],
          "relevance": 1,
          "properties": {
            "code": "14341"
          },
          "text": "神奈川県中郡大磯町",
          "place_name": "神奈川県中郡大磯町",
          "matching_text": "大磯町",
          "matching_place_name": "大磯町",
          "bbox": [
            139.25085050564633,
            35.29728800863472,
            139.33406953288272,
            35.33443858597201
          ],
          "center": [
            139.29246001926452,
            35.315863297303366
          ],
          "geometry": {
            "type": "Point",
            "coordinates": [
              139.29246001926452,
              35.315863297303366
            ]
          }
        }
      ]
    }
    

    Reverse Geocoding



    22시~9시 사이는 정지합니다.또, 시기를 보고 예고 없이 닫습니다, 양해 바랍니다


    매개변수


  • access_token
  • 인증용. 여기서 무시해도 괜찮습니다

  • q
  • Reverse Geocoding하고 싶은 경도, 위도


  • 출력 결과(GeoJSON)


    {
      "type": "FeatureCollection",
      "query": [
        141.353611,
        43.0625
      ],
      "features": [
        {
          "id": "data.143",
          "type": "Feature",
          "place_type": [
            "data"
          ],
          "relevance": 1,
          "properties": {
            "code": "01101"
          },
          "text": "北海道石狩振興局札幌市中央区",
          "place_name": "北海道石狩振興局札幌市中央区",
          "bbox": [
            141.20187360558248,
            42.997474721281435,
            141.3896355507402,
            43.0861158375759
          ],
          "center": [
            141.29575457816134,
            43.04179527942867
          ],
          "geometry": {
            "type": "Point",
            "coordinates": [
              141.29575457816134,
              43.04179527942867
            ]
          }
        }
      ]
    }
    

    해당 도도부현이 「홋카이도」의 경우, 해당하는 지청・진흥국의 명칭이 들어갑니다

    그림





    절차


  • 국토 수치 정보의 행정 구역 데이터 (GeoJSON) 최적화
  • tippecanoe에서 벡터 타일링
  • carmen-index.js로 인덱싱
  • 이제 지오코더에 필요한 데이터가 생성됩니다.
  • ***.fuzzy
  • ***.grid.rocksdb
  • ***.mbtiles

  • 후에는 Carmen에 쿼리를 던지기 만

  • 순서 4까지가 사전에 준비해 두는 것입니다만, 이번의 경우, 몇 분으로 완료했습니다.
    또, 벡터 타일, 인덱스 모두 z12까지로 하고 있습니다.

    보충



    Carmen에서 geocoding한 결과를 그대로 출력하는 사양입니다. 자세한 내용은 여기을 참조하십시오 (소스 코드에 대한 링크가 끊어졌지만 ...)

    여담



    Rust로 다시 만들기프로젝트가 진행되고 있는 것 같습니다. Mapbox의 리포지토리를 바라 보면 Rust를 사용한 것이 조금씩 늘어나고 있다고 생각합니다. Golang이 아닌 것은 Google로 만들어졌기 때문입니까?

    좋은 웹페이지 즐겨찾기