Этот тип вопроса, кажется, задавался много раз, но ни одно из решений не привело меня никуда от ответа, который мне нужен.
У меня есть эта карта Нортленд, Новая Зеландия, и я хотел бы сопоставить значения Lat / Long значениям x / y (pixel) на этом изображении (http://img.ruphp.com/php/3ok4O.gif – который Квадрат 400 пикселей)
Прямо сейчас я не знаю точных лат / длинных границ этого изображения, но у меня есть некоторые примеры данных, которые должны быть полезны кому-то, кто знает, что они делают.
LAT LONG XY -35.3989854471 173.504676819 192.92777494 196.760481649 -35.2647882735 174.121499062 271.426291418 176.82865668 -35.3131641432 173.89125824 242.099305271 183.945780963
Данные, которые я получаю сейчас, являются только Lat / long, поэтому мне нужно иметь возможность создавать значения x и y в приложении.
Может ли кто-нибудь помочь мне написать требуемый метод / логику для создания этих значений x / y.
Спасибо!
в Javascript ….
var lat=-35.3989854471; var long=173.504676819; var imageNorthLat=???; var imageSouthLat=???; var imageWestLong=???; var imageEastLong=???; var imageLongPixels=400; var imageLatPixels=400; var pixelsPerLat=imageLatPixels/(imageNorthLat-imageSouthLat); var pixelsPerLong=imageLongPixels/(imageEastLong-imageWestLong); var xPixelPosition=(long-imageWestLong)*pixelsPerLong; var yPixelPosition=Math.abs(lat-imageNorthLat)*pixelsPerLat;
Я не пытался запускать это, поэтому, вероятно, потребуется немного отладки, и позиции пикселя x и y должны были бы добавить к ним позиции x и y в верхнем левом углу или на карте. Но вы можете видеть эту идею. И, конечно, я, возможно, не понял, о чем вы действительно спрашиваете.
создать файл map.html локально, вызвать браузер:
<!DOCTYPE html> <html> <head> <title>MY MAP</title> <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no"> <meta charset="UTF-8"> <link href="http://code.google.com/apis/maps/documentation/javascript/examples/default.css" rel="stylesheet" type="text/css"> <script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false"></script> <script type="text/javascript"> var map; var myLatlng1 = new google.maps.LatLng(-35.3989854471, 173.504676819); var myLatlng2 = new google.maps.LatLng(-35.2647882735, 174.121499062); var myLatlng3 = new google.maps.LatLng(-35.3131641432, 173.89125824); function initialize() { var myOptions = { zoom: 8, center: new google.maps.LatLng(-35.3989854471, 173.504676819), mapTypeId: google.maps.MapTypeId.ROADMAP }; map = new google.maps.Map(document.getElementById('map_canvas'), myOptions); var marker2 = new google.maps.Marker({ position: myLatlng2, map: map, title:"POSITION 2" }); var marker1 = new google.maps.Marker({ position: myLatlng1, map: map, title:"POSITION 3" }); var marker3 = new google.maps.Marker({ position: myLatlng3, map: map, title:"POSITION 3" }); } google.maps.event.addDomListener(window, 'load', initialize); </script> </head> <body> <div id="map_canvas"></div> </body> </html>
Преобразование Lat / Long в пикселях только путем масштабирования, поскольку вы предлагаете работать только на небольшой выбранной части земного шара, поскольку константы масштабирования меняются в зависимости от широты.
Преобразование в координаты универсального поперечного Меркатора (UTM) может работать на небольших участках. Сначала вы вычисляете зону UTM центральной точки области просмотра, а затем конвертируете все остальные точки, которые вам нужно показывать на этом экране, используя эту зону (а не фактическую зону точки).
Координаты UTM могут быть преобразованы в пиксели простым масштабированием, поскольку они являются линейными. Разумеется, этот метод полезен только для областей, которые не намного больше, чем одна зона UTM ( несколько сотен километров ). Однако «Зонный замок» работает хорошо, если он немного больше, или просто граница зоны UTM внутри области просмотра.
Существуют хорошие, простые в использовании библиотеки с открытым исходным кодом для преобразования координат. Поскольку вы – платформа JavaScript, может стоить посмотреть на геодезию . Он имеет много хороших методов для координации преобразования, расчета расстояния, подшипников, средних точек и всех подобных.