Есть еще один способ подойти к этому с помощью API Google Планета Земля.Я знаю, что это javascript, но я подумал, что это новый способ решения проблемы.
В любом случае, я собрал полное рабочее решение - обратите внимание, что оно работает и для рек: http://www.msa.mmu.ac.uk/~fraser/ge/coord/
Основная идея, которую я использовал, заключается в реализации метода hiTest объекта GEView в API Google Планета Земля .
Взгляните на следующий пример хита от Google.http://earth -api-samples.googlecode.com / svn / trunk / examples / hittest.html
Метод hitTest предоставляет случайную точку на экране в (координаты пикселей) длякоторый возвращает объект GEHitTestResult, который содержит информацию о географическом местоположении, соответствующем точке.Если в методе используется режим GEPlugin.HIT_TEST_TERRAIN, можно ограничить результаты только сушей (рельефом), пока мы отображаем результаты в точках с высотой> 1 м
. Эта функция, которую я использую, реализуетhitTest:
var hitTestTerrain = function()
{
var x = getRandomInt(0, 200); // same pixel size as the map3d div height
var y = getRandomInt(0, 200); // ditto for width
var result = ge.getView().hitTest(x, ge.UNITS_PIXELS, y, ge.UNITS_PIXELS, ge.HIT_TEST_TERRAIN);
var success = result && (result.getAltitude() > 1);
return { success: success, result: result };
};
Очевидно, вы также хотите получать случайные результаты из любой точки земного шара (а не только случайные точки, видимые с одной точки зрения).Для этого я перемещаю представление Земли после каждого успешного hitTestTerrain
вызова.Это достигается с помощью небольшой вспомогательной функции.
var flyTo = function(lat, lng, rng)
{
lookAt.setLatitude(lat);
lookAt.setLongitude(lng);
lookAt.setRange(rng);
ge.getView().setAbstractView(lookAt);
};
Наконец, вот урезанная версия основного блока кода, который вызывает эти два метода.
var getRandomLandCoordinates = function()
{
var test = hitTestTerrain();
if (test.success)
{
coords[coords.length] = { lat: test.result.getLatitude(), lng: test.result.getLongitude() };
}
if (coords.length <= number)
{
getRandomLandCoordinates();
}
else
{
displayResults();
}
};
Итак, земля движетсяслучайным образом до позиции
Другие функции - это просто помощники для генерации случайных чисел x, y и случайных чисел лат, lng, вывода результатов, а также для переключения элементов управления и т. д.
Я немного протестировал код, и результаты не на 100% идеальны, настройка altitude
на что-то более высокое, например, 50 м решает это, но, очевидно, это уменьшает область возможных выбранных координат.
Очевидно, вы можете адаптировать идею к вашим потребностям.Может быть, запустить код несколько раз, чтобы заполнить базу данных или что-то в этом роде.