Google지도 유틸리티 라이브러리를 사용하여 Google지도의지도 타일 서버 및 좌표 변환과 관련하여 질문이 있습니다.Google지도 타일 서버 및 PHP의 Google지도 유틸리티를 사용하여 오류 표시
내 타일 서버는 수천 개의 gps 좌표 (lat, lng)로 데이터베이스에 액세스하고 모든 (lat, lng) 포인트에 대해 해당 포인트가 타일의 지리적 경계 내에 있는지 확인합니다. 이 경우 GoogleMapsUtility Library를 사용하여 변환 (WGS84 -> Mercator -> X, Y 타일 내 오프셋)을 조정하고 타일 내부의 해당 픽셀을 칠합니다.
, 다음 작업을 수행 할 코드의 관점에서다음 getOffsetPixelCoords
함수를 호출
$point = GoogleMapUtility::getOffsetPixelCoords((float)$row['lat'], (float)$row['lng'], $zoom, $X, $Y);
(차례로 아래의 기능) 라이브러리에서 :
public static function getOffsetPixelCoords($lat,$lng,$zoom, $X, $Y)
{
$pixelCoords = GoogleMapUtility::getPixelCoords($lat, $lng, $zoom);
return new Point(
$pixelCoords->x - $X * GoogleMapUtility::TILE_SIZE,
$pixelCoords->y - $Y * GoogleMapUtility::TILE_SIZE
);
}
public static function getPixelCoords($lat, $lng, $zoom)
{
$normalised = GoogleMapUtility::_toNormalisedMercatorCoords(GoogleMapUtility::_toMercatorCoords($lat, $lng));
$scale = (1 << ($zoom)) * GoogleMapUtility::TILE_SIZE;
return new Point(
(int)($normalised->x * $scale),
(int)($normalised->y * $scale)
);
}
private static function _toNormalisedMercatorCoords($point)
{
$point->x += 0.5;
$point->y = abs($point->y-0.5);
return $point;
}
좋아, 이제 결과 . 이 위대한 작품을 < 13 줌 레벨은 아래의 줌 레벨 11 타일의 예는 다음과 같습니다 줌 레벨> (13)의 타일,
그러나, 다음과 같은 상황이 발생합니다
정말 이상합니다 ... 픽셀이 완벽하게 정렬 된 것 같습니다. 처음에는 10 진 해상도 문제라고 생각했지만 데이터의 해상도는 매우 좋았습니다 (예 : 35.6185989379883, 139.731994628906과 같이 mysql 데이터베이스에 이중으로 저장 됨). 그리고 PHP 부동 소수점 및 복식에서 같은 결과가 나타납니다 ...)
누군가이 문제를 해결하는 방법을 알려 줄 수 있습니까?
미리 감사드립니다 ...
답장을 보내 주셔서 감사합니다. 처음에 캐스팅은 거기에 없었습니다. 캐스팅을 추가하면 어떻게되는지 확인하고 싶었습니다. 어쨌든, 나는 캐스팅과 독립적으로 같은 결과를 얻습니다. –