0

me와 친구가 Google지도를 사용하는 클래스의 Android 앱을 제작하려고하는데이 오류로 인해 일을 보내고 있습니다.세계 좌표에서 타일 위치로 변환

앱은 사용자의 위치에 대한 업데이트를 받고, 저장하고, 저장된 좌표에 페인트하는 것이 이상적입니다. 타일이 사용자가 방문한 좌표를 포함하고 있다면 타일 전체에 페인트하려고하는 것입니다. 그러나 줌이 높을수록 칠해진 타일이 북쪽으로 이동하고 서쪽이 실제 좌표에서 조금 더 이동하기 때문에 좌표에서 타일 위치로의 변환이 잘못되었다고 생각합니다. 이제 우리는 세계를 가정하고

private boolean isCoordInTileForZoom(int tileX, int tileY, int zoom) 
{ 
    //coordinate to check if they are in the current tile 
    float lon = WILF_TEST_COOR.x; 
    float lat = WILF_TEST_COOR.y; 

    //coordinates in terms of map length and map height 
    float mapX = lon + 180; 
    float mapY = (lat * -1) + 150; 

    //number of tiles in a row or column (2^zoom) 
    int tiles = (int) Math.pow(2,zoom); 

    //the height and width of a single tile 
    double tileWidth = 360.0/tiles; 
    double tileHeight = 180.0/tiles; 

    int mapCol = (int) (mapX/tileWidth); 
    int mapRow = (int) (mapY/tileHeight); 

    Log.d("Minimap.mapGridDetails"," \n" + "Zoom level: " + zoom + "\nMap Rows: " + tiles + "\nTile Width: " + tileWidth + "\nTile Height: " + tileHeight); 

    if (mapCol == tileX && mapRow == tileY) 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 

줌 레벨 2에서에서 360 개도, 의미 키가 180도이며, 각 타일은 90x45 (4 × 4 그리드)이어야한다. 그리고 그것은 확대/축소 2에서 작동하고 3을 생각하지만 확대/축소 4에서는 페인트 칠한 타일이 예상 지점의 북쪽으로 점프합니다.

좌표 변환이 작동하는 방식을 가정 할 때 문제가 발생한다는 느낌이 들었습니다. (Google의 세계지도는 아마도 우리에게별로 좋지 않은 평평한 표면이라고 가정하고 있습니다.) Google지도가 실제로 더 키가 큰지도 모르겠습니다. 180도 이상. 어느 것이 든,이 일은 며칠 안에 만기가된다 그래서 우리는 어떤 통보든지를 위해 미리 감사한다.

답변

0

본 적이 있습니까? https://developers.google.com/maps/documentation/javascript/examples/map-coordinates? 자바 스크립트이지만 올바른 좌표 변환의 원칙을 보여줍니다.

내 대답을 확인할 수도 있습니다 SO question. 거기에 제공된 TileProjection 클래스가 귀하의 질문에 대답해야합니다. 예 : getTileBounds 메소드를 사용하여 좌표가 타일 안에 있는지 확인하거나 latLngToPoint 메소드를 사용하여 포인트의 x와 y가 모두 0 - TILE_SIZE 범위에 있는지 확인하십시오.

관련 문제