Карты Google w/counties накладываются?

У меня нет опыта работы с Картами Google, но я хотел бы включить карту "Выберите свою страну" в моем веб-приложении. Мое приложение ориентировано только на Калифорнию, поэтому ему нужно поддерживать только одно состояние, но я не могу найти простой способ сделать это (без рисования наложенных полигонов для всех линий графства).

Я предположил, что я легко смогу найти примеры интерфейсов "Choose your county" в Google, но единственное, что я нашел, - это http://maps.huge.info/county.htm - и я склоняюсь к тому, чтобы ударить их API, чтобы вытащить геометрию для всего состояния, если я не могу найти лучший вариант.

Есть ли у кого-нибудь опыт или понимание, чтобы помочь сделать это немного проще? Спасибо!

Ответы

Ответ 1

Таблицы Google Fusion теперь связаны с данными штата, округа и округа округа для всех США.

Поле геометрии таблицы слияния содержит элемент Polygon для данного объекта. Их полигоны государственных границ (и, в меньшей степени, округи) выглядят немного низким разрешением в нескольких местах, но это может быть достаточно для вас и должно быть относительно легко захватить.

Ответ 2

API Карт Google не предоставляет графские полигоны или любые другие предопределенные границы государств или стран. Поэтому основной проблемой здесь является получение данных полигона.

Многоугольник API Карт Google определяется построением массива объектов LatLng (при условии, что вы используете API v3):

var bermudaTriangleCoords = [
  new google.maps.LatLng(25.774252, -80.190262),
  new google.maps.LatLng(18.466465, -66.118292),
  new google.maps.LatLng(32.321384, -64.757370),
  new google.maps.LatLng(25.774252, -80.190262)
];    

Затем вы должны использовать этот массив для создания объекта Polygon:

var bermudaTriangle = new google.maps.Polygon({
  paths: bermudaTriangleCoords,
  strokeColor: '#FF0000',
  strokeOpacity: 0.8,
  strokeWeight: 2,
  fillColor: '#FF0000',
  fillOpacity: 0.35
});

И, наконец, покажите его на карте, вызвав метод setMap():

bermudaTriangle.setMap(map);    // Assuming map is your google.maps.Map object

Если вы сохраняете ссылку на свой объект Polygon, вы также можете скрыть его, передав null методу setMap():

bermudaTriangle.setMap(null); 

Поэтому вы можете рассмотреть возможность создания объекта JavaScript с именем свойства для каждого округа. Это позволит вам отображать объекты многоугольника из названия графств в O (1) (постоянное время), без необходимости повторять все Коллекция. Рассмотрим следующий пример:

// Let start with an empty object:
var counties = {    
};

// Now let add a county polygon:
counties['Alameda'] = new google.maps.Polygon({
  paths: [
    // This is not real data:
    new google.maps.LatLng(25.774252, -80.190262),
    new google.maps.LatLng(18.466465, -66.118292),
    new google.maps.LatLng(32.321384, -64.757370),
    new google.maps.LatLng(25.774252, -80.190262)
    // ...
  ],
  strokeColor: '#FF0000',
  strokeOpacity: 0.8,
  strokeWeight: 2,
  fillColor: '#FF0000",
  fillOpacity: 0.3'
});

// Next county:
counties['Alpine'] = new google.maps.Polygon({
  // Same stuff
});

// And so on...

Объект counties будет нашим хранилищем данных. Когда пользователь ищет "El Dorado", вы можете просто показать многоугольник следующим образом:

counties['El Dorado'].setMap(map);

Если вы сохраняете ссылку на ранее найденный округ, вы также можете вызвать setMap(null), чтобы скрыть предыдущий многоугольник:

var userInput = 'El Dorado';
var latestSearch = null;

// Check if the county exists in our data store:
if (counties.hasOwnProperty(userInput)) {
  // It does - So hide the previous polygon if there was one:
  if (latestSearch) {
    latestSearch.setMap(null);
  }
  // Show the polygon for the searched county:
  latestSearch = counties[userInput].setMap(map);
}
else {
  alert('Error: The ' + userInput + ' county was not found');
}

Надеюсь, это поможет вам двигаться в правильном направлении.