Примерно неделю назад у меня возникла проблема: на пользовательской карте, основанной на Google, мои полигоны не появлялись, в то время как маркеры для тех же координат полностью в порядке. Несмотря на мои усилия с API Карт Google, кажется, что я не могу найти причину.
Вот ссылка на скриншот карты. Фиолетовые стрелки и цифры - мое дополнение, они показывают:
-
google.maps.Marker
Я мог бы разместить по краям моей "области". - Артефакт, созданный кодом
google.maps.Polygon
. Он красный, как ожидалось, но совершенно неуместен и странно плоский.
Вот часть кода, в котором генерируются маркеры и многоугольники:
var regionData = tecMap.regions[r];
var regionMapMarkers = new google.maps.MVCArray();
for (c in regionData.coords) {
var point = projection.worldToMap(regionData.coords[c]);
debugRegionPoints.push(point);
var thisLatLng = projection.fromPointToLatLng(point);
debugRegionLatLngs.push(thisLatLng);
regionMapMarkers.push(thisLatLng);
}
regionMapMarkers.forEach(function(latLng, m){
var marker = new google.maps.Marker({
position: latLng,
map: map,
title: '',
optimized: false
});
regionCorners.push(marker);
});
var paths = new google.maps.MVCArray();
paths.push(regionMapMarkers);
var region = new google.maps.Polygon({
fillColor: "#FF0000",
fillOpacity: 0.35,
map: map,
paths: paths,
strokeColor: "#FF0000",
strokeOpacity: 0.8,
strokeWeight: 2
});
regionPolys.push(region);
Если вам интересно о массиве массивов, все это наравне с API Javascript Google Maps.
Если вы хотите посмотреть на карту и связанные с ней сценарии, вы можете найти ее здесь.
Фрагмент кода находится в Scripts/tectonicus.js
, начиная с строки 659.
[Изменить] Некоторые сведения об отладке:
Кажется, это проблема рендеринга, а не "расчетная". С консоли firebug на карте, с которой я связан, оба
regionPolys[0].getPath().getArray();
и
for (i in regionCorners) {console.log(regionCorners[i].getPosition())};
вернет
P { Na=0.20123958504464223, Oa=-22.5249097921875}
P { Na=-0.21702715474330336, Oa=-32.7277467}
P { Na=0.19466306397879407, Oa=-37.51230686484375}
P { Na=0.12889785332031245, Oa=-49.04594858671875}
Если я прав, это означает, что они имеют одинаковые координаты, которые совпадают с кодом.
[Edit2] Новые достижения!
Кажется, что векторы имеют проблемы с обработкой при работе с настраиваемой проекцией, например, той, которая используется для отображения этой изометрической карты Minecraft. (Создано с Tectonicus)
После последних комментариев я добавляю к живому коду, связанному над двумя новыми массивами отладки,
debugRegionLatLngs
и debugRegionPoints
. Выше кода обновляется, чтобы вы могли видеть, что они содержат.
[Edit3] Проецирование и координаты
Пересекая исследование BicycleDude с моим, теперь он почти уверен, что это обычная проекция, которая разрушает полигоны. Фактически существует возможная ошибка в API Google Карт.
Эта проекция используется, потому что карты Minecraft могут быть практически бесконечными и все же должны использовать gmap, который обертывается после 360 ° долготы. Также связан тот факт, что игровые координаты отображаются изометрическим образом, а gmaps ожидает нечто большее, чем проекция Меркатора.
Я попытался немного подстроить проекцию, но до сих пор не имел интересных результатов.