2012-08-14 5 views
1

티타늄 (appcelerator)에서 간단한 mapview를 만들려고합니다.하지만 사용자가 클릭하거나 길게 눌러 위도와 경도를 얻고 싶습니다. 지도에서 선택한 경도. 지도보기에는 mapview.addEventListener('click',function(evt))이 있지만 클릭 할 때 이러한 값을 얻지 못합니다. 이걸로 어떤 도움이 굉장 할 것입니다!티타늄지도보기 클릭 위도와 경도

답변

4

너무 크게 축소하지 않은 경우 클릭 또는 롱 프레스 좌표에서 위도와 경도를 계산하는 것은 매우 쉽습니다. 일반 컨테이너보기에 둥지를하고 그에 리스너를 추가, 그래서 당신은지도보기 자체에 longpress 이벤트를 수신하지 못할 this question at Appcelerator Q&A:

var calculateLatLngfromPixels = function(mapview, xPixels, yPixels) { 

    var region = mapview.actualRegion || mapview.region; 
    var widthInPixels = mapview.rect.width; 
    var heightInPixels = mapview.rect.height; 

    // should invert because of the pixel reference frame 
    heightDegPerPixel = -region.latitudeDelta/heightInPixels; 
    widthDegPerPixel = region.longitudeDelta/widthInPixels; 

    return { 
     lat : (yPixels - heightInPixels/2) * heightDegPerPixel + region.latitude, 
     lon : (xPixels - widthInPixels/2) * widthDegPerPixel + region.longitude 

    }; 
} 

주에서 촬영하는 이벤트 리스너 내에서이 기능을 사용합니다. 이 같은 사용 예제 : 경우

var container = Ti.UI.createView({ 
    top : 0, 
    left : 0 
}); 
container.add(mapview); 

container.addEventListener('longpress', function(e) { 
    var coordinate = calculateLatLngfromPixels(mapview, e.x, e.y); 
    var longitude = coordinate.lat; 
    var latitude = coordinate.lat; 
}); 

이 작동됩니다 개봉이 완전히 축소 땅,의 (상대적으로) 작은 영역에서 찾고, 당신은 때문에의 실제 좌표를 얻기 위해 메르카토르 투영을 사용하는 것 지구의 곡률, 완전히 축소 된 다음 모듈을 사용하려면.

+0

mapview.addEventListener ('longpress')와 유사하거나 mapview.addEventListener ('click')가 티타늄에서 실행되지 않습니다. 두 이벤트 모두 해고하거나 반환 값을 시도하지 않았습니다. – thechrisberry

+0

컨테이너 뷰에 mapview를 추가 한 다음 리스너를 컨테이너 뷰에 추가하면 정확히 동일하게 작동합니다. –

+1

다른 사람이 이러한 유형의 문제를 겪고있는 것처럼 보이면지도를로드 할 때지도의 지역을 설정하거나 미리 정의해야합니다. 당신이지도를하지 않으면, 지역이 정의되지 않아서 오류가 발생합니다. 고마워요 조 시아 – thechrisberry

관련 문제