2011-10-08 4 views
0

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)의 타일,

Image1

그러나, 다음과 같은 상황이 발생합니다

Image2

정말 이상합니다 ... 픽셀이 완벽하게 정렬 된 것 같습니다. 처음에는 10 진 해상도 문제라고 생각했지만 데이터의 해상도는 매우 좋았습니다 (예 : 35.6185989379883, 139.731994628906과 같이 mysql 데이터베이스에 이중으로 저장 됨). 그리고 PHP 부동 소수점 및 복식에서 같은 결과가 나타납니다 ...)

누군가이 문제를 해결하는 방법을 알려 줄 수 있습니까?

미리 감사드립니다 ...

답변

0

왜 데이터베이스 쿼리 결과에 형식 변환을 사용합니까? 책 googlemapsutility의 예에서는 거기 있지 않습니까?

+0

답장을 보내 주셔서 감사합니다. 처음에 캐스팅은 거기에 없었습니다. 캐스팅을 추가하면 어떻게되는지 확인하고 싶었습니다. 어쨌든, 나는 캐스팅과 독립적으로 같은 결과를 얻습니다. –