your programing

Google지도 v3에서 다각형의 중심을 얻는 방법은 무엇입니까?

lovepro 2020. 12. 31. 23:09
반응형

Google지도 v3에서 다각형의 중심을 얻는 방법은 무엇입니까?


100 % 정확할 필요는 없으며 경계 사각형의 중심이 될 수 있습니다.


연산:

다각형의 모든 점을 통과합니다. 모든 포인트를 찾으십시오.

  • x1, 가장 낮은 x좌표
  • y1, 가장 낮은 y좌표
  • x2, 가장 높은 x좌표
  • y2, 가장 높은 y좌표

이제 경계 사각형이 있으며 다음을 사용하여 중심을 작업 할 수 있습니다.

center.x = x1 + ((x2 - x1) / 2);
center.y = y1 + ((y2 - y1) / 2);

Matthew의 대답 은 좋은 해결책입니다. 그러나 Google Maps API v3를 사용하는 LatLngBounds경우 extend()메서드를 통해 다각형의 각 지점을 개체 에 전달한 다음 마지막으로 개체 getCenter()에 대한 메서드를 호출 할 수 LatLngBounds있습니다. 다음 예를 고려하십시오.

var bounds = new google.maps.LatLngBounds();
var i;

// The Bermuda Triangle
var polygonCoords = [
  new google.maps.LatLng(25.774252, -80.190262),
  new google.maps.LatLng(18.466465, -66.118292),
  new google.maps.LatLng(32.321384, -64.757370),
  new google.maps.LatLng(25.774252, -80.190262)
];

for (i = 0; i < polygonCoords.length; i++) {
  bounds.extend(polygonCoords[i]);
}

// The Center of the Bermuda Triangle - (25.3939245, -72.473816)
console.log(bounds.getCenter());

누락 된 함수의 고유 한 버전으로 Polygon 클래스를 확장 할 수 있습니다. my_getBounds ()라고 부르겠습니다.

google.maps.Polygon.prototype.my_getBounds=function(){
    var bounds = new google.maps.LatLngBounds()
    this.getPath().forEach(function(element,index){bounds.extend(element)})
    return bounds
}

다음과 같은 코드에서 사용하는 것보다 :

myPolygon.my_getBounds().getCenter()

... 등, v2 동작과 동일해야합니다.


다음은 내가 작성한 사용자 지정 함수입니다. 자유롭게 사용하십시오.

function polygonCenter(poly) {
    var latitudes = [];
    var longitudes = [];
    var vertices = poly.getPath();

    // put all latitudes and longitudes in arrays
    for (var i = 0; i < vertices.length; i++) {
        longitudes.push(vertices.getAt(i).lng());
        latitudes.push(vertices.getAt(i).lat());
    }

    // sort the arrays low to high
    latitudes.sort();
    longitudes.sort();

    // get the min and max of each
    var lowX = latitudes[0];
    var highX = latitudes[latitudes.length - 1];
    var lowy = longitudes[0];
    var highy = longitudes[latitudes.length - 1];

    // center of the polygon is the starting point plus the midpoint
    var centerX = lowX + ((highX - lowX) / 2);
    var centerY = lowy + ((highy - lowy) / 2);

    return (new google.maps.LatLng(centerX, centerY));
}

오목한 다각형의 경우 경계 사각형의 중심이 완전히 다각형 외부에있을 수 있습니다. 다각형이 오목한 경우 가장 큰 내접원의 중심을 다각형의 "중심"으로 사용하는 것이 좋습니다. 여기에서 충분히 간단한 알고리즘을 볼 수 있습니다 (p. 4) . 작업이 다각형에 레이블을 배치하는 것이라면 이것은 또한 가장 미적으로 만족스러운 결과를 제공 할 것입니다 (이 경우 다각형이 오목하지 않더라도이 방법을 사용하는 것이 좋습니다).

참조 URL : https://stackoverflow.com/questions/3081021/how-to-get-the-center-of-a-polygon-in-google-maps-v3

반응형