Границы страны с использованием Google Map API v3

Есть ли так или иначе, чтобы я мог получить границы стран в значении координат многоугольника, используя Google map API.

Ответы на вопрос(3)

я предлагаю использоватьgoogle.maps.Data слой вместо таблиц Fusion. Таблицы Fusion и Fusion Layer имеют свои ограничения, например, на карте мира в примере геокодирования вы можете видеть, что если вы уменьшаете масштаб карты, границы будут сужаться до точек. СУровень данных Вы можете стилизовать определенные границы или скрыть их.Fusion Layer позволяет только условные изменения стиля. Вы также можете добавить свой собственныйclick, mouseover, mouseout Слушатели, вы можете изменить пограничный слой на лету и многое другое. Конечно иногдаFusion Layer Лучшая альтернатива, например, если у вас есть данные, содержащиеся в таблицах Fusion, но если вы хотите больше контроляData Layer более чем достойная альтернатива.

В следующем рабочем примере я показываю границы стран мира и штатов США с использованиемData Layerкак пример. Конечно, вы можете использовать свои собственные граничные файлы. Если у вас нет доступной версии GeoJson (только файлы Shapefiles или KML), вы можете преобразовать их в GeoJson с помощью таких утилит, какmapshaper (просто запустите:mapshaper -i myshp.shp -o format=geojson out.geo.json)

var map = null;
  var my_boundaries = {};
  var data_layer;
  var info_window;

  //initialize map on document ready
  $(document).ready(function(){
  	var latlng = new google.maps.LatLng(40.723080, -73.984340); //you can use any location as center on map startup
  	var myOptions = {
  		zoom: 2,
  		center: latlng,
  		mapTypeControl: true,
  		mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU},
  		navigationControl: true,
  		mapTypeId: google.maps.MapTypeId.ROADMAP
  	};
  	map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
  	google.maps.event.addListener(map, 'click', function(){
  		if(info_window){
  			info_window.setMap(null);
  			info_window = null;
  		}
  	});
	
	$('#boundary_load_select').change(function(){
		if($(this).val()==1){
			loadBoundariesFromGeoJson("https://raw.githubusercontent.com/matej-pavla/Google-Maps-Examples/master/BoundariesExample/geojsons/world.countries.geo.json");
		}else{
			loadBoundariesFromGeoJson("https://raw.githubusercontent.com/matej-pavla/Google-Maps-Examples/master/BoundariesExample/geojsons/us.states.geo.json");
		}
	});
	loadBoundariesFromGeoJson("https://raw.githubusercontent.com/matej-pavla/Google-Maps-Examples/master/BoundariesExample/geojsons/world.countries.geo.json");
  });

  function initializeDataLayer(){
	if(data_layer){
		data_layer.forEach(function(feature) {
		    data_layer.remove(feature);
		});
		data_layer = null;
	}
	data_layer = new google.maps.Data({map: map}); //initialize data layer which contains the boundaries. It's possible to have multiple data layers on one map
  	data_layer.setStyle({ //using set style we can set styles for all boundaries at once
  		fillColor: 'white',
  		strokeWeight: 1,
  		fillOpacity: 0.1
  	});

  	data_layer.addListener('click', function(e) { //we can listen for a boundary click and identify boundary based on e.feature.getProperty('boundary_id'); we set when adding boundary to data layer
  		var boundary_id = e.feature.getProperty('boundary_id');
  		var boundary_name = "NOT SET";
  		if(boundary_id && my_boundaries[boundary_id] && my_boundaries[boundary_id].name) boundary_name = my_boundaries[boundary_id].name;
  		if(info_window){
  			info_window.setMap(null);
  			info_window = null;
  		}
  		info_window = new google.maps.InfoWindow({
  			content: '<div>You have clicked a boundary: <span style="color:red;">' + boundary_name + '</span></div>',
  			size: new google.maps.Size(150,50),
  			position: e.latLng, map: map
  		});
  	});
	
	data_layer.addListener('mouseover', function(e) {
		data_layer.overrideStyle(e.feature, {
			strokeWeight: 3,
			strokeColor: '#ff0000'
		});
	});
	
	data_layer.addListener('mouseout', function(e) {
		data_layer.overrideStyle(e.feature, {
			strokeWeight: 1,
			strokeColor: ''
		});
	});
  }

  function loadBoundariesFromGeoJson(geo_json_url){
	initializeDataLayer();
  	$.getJSON(geo_json_url, function(data){
  		if(data.type == "FeatureCollection"){ //we have a collection of boundaries in geojson format
  			if(data.features){
  				for(var i = 0; i < data.features.length; i++){
					var boundary_id = i + 1;
  					var new_boundary = {};
  					if(!data.features[i].properties) data.features[i].properties = {}; 
					data.features[i].properties.boundary_id = boundary_id; //we will use this id to identify boundary later when clicking on it
  					data_layer.addGeoJson(data.features[i], {idPropertyName: 'boundary_id'});
					new_boundary.feature = data_layer.getFeatureById(boundary_id);
  					if(data.features[i].properties.name) new_boundary.name = data.features[i].properties.name;
					if(data.features[i].properties.NAME) new_boundary.name = data.features[i].properties.NAME;
  					my_boundaries[boundary_id] = new_boundary;
  				}
  			}
			if(my_boundaries[24]){ //just an example, that you can change styles of individual boundary
				data_layer.overrideStyle(my_boundaries[24].feature, {
					fillColor: '#0000FF',
					fillOpacity: 0.9
				});
			}
  		}
  	});
  }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript">
google.load("maps", "3",{other_params:"sensor=false"});
</script>
<body style="margin:0px; padding:0px;" >
	<select id="boundary_load_select">
		<option value="1">Load World Boundaries</option>
		<option value="2">Load US States Boundaries</option>
	</select>
	<div id="map_canvas" style="height:400px; width:500px;"></div>
</body>

 08 мая 2017 г., 09:08
как я могу сделать это на уровне почтового индекса? /
 22 дек. 2016 г., 08:11
как я могу получить информацию о штатах других стран, кроме США?
 08 сент. 2016 г., 16:26
Эй, спасибо, чувак, я искал URL, но твоя внутренняя ссылка сработала для меня, спасибо. Ребята, дайте мне знать, если вам нужна помощь в составлении границ страны.
 22 дек. 2016 г., 13:10
На этот вопрос нет однозначного ответа. Для некоторых стран вы можете даже не получить их. Для США, Австралии и я также думаю, что в Новой Зеландии и Калифорнии вы можете найти данные переписи, где границы обычно доступны. В Великобритании, например, есть Ordnance Survey. В некоторых странах я вообще не мог их найти, а в некоторых им платили. Так что вам придется гуглить.
 08 мая 2017 г., 10:47
Вы начинаете так же, как границы страны, но вы должны найти данные для границ почтового индекса, и это зависит от страны: для США вы можете найти их (census.gov/cgi-bin/geo/shapefiles/index.php), для AU тоже, для некоторых стран им платят, для некоторых я вообще не смог их найти ... Так что вам нужно искать, нет единого места, где можно получить их все ... Проблема с zips заключается в том, что что в браузере обычно слишком много полигонов для обработки. Советы, как это сделать, например, проверить. этот ответ:stackoverflow.com/a/37167093/2661226
Решение Вопроса

Google Maps V3: рисовать государственные полигоны Германии?

Набор данных Natural Earth в FusionTables содержит доступные для страны полигоны. Вы можете оформить их, как вам нравится.

Я использовал его для создания этого примера: http://www.geocodezip.com/v3_FusionTablesLayer_worldmap_linkto.html

Вот пример, который использует KmlLayer: http://www.geocodezip.com/v3_GoogleEx_layer-kml_world_countries_simple.html

code snippet:

var kmlLayer = null;
var map = null;

function openIW(layerEvt) {
  if (layerEvt.row) {
    var content = layerEvt.row['admin'].value;
  } else if (layerEvt.featureData) {
    var content = layerEvt.featureData.name;
  }
  document.getElementById('info').innerHTML = "you clicked on:<br>" + content;
}

function initialize() {
  var chicago = new google.maps.LatLng(36.4278, -15.9);
  var myOptions = {
    zoom: 0,
    center: chicago,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  }

  map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

  google.maps.event.addListener(map, "click", function() {
    document.getElementById('info').innerHTML = "";
  });


  kmlLayer = new google.maps.KmlLayer('http://www.geocodezip.com/geoxml3_test/world_countries_kml.xml', {
    preserveViewport: true,
    suppressInfoWindows: true
  });
  kmlLayer.setMap(map);

  google.maps.event.addListener(kmlLayer, 'click', openIW);
}
google.maps.event.addDomListener(window, 'load', initialize);
<script src="https://maps.googleapis.com/maps/api/js"></script>
<table>
  <tr>
    <td>
      <div id="map_canvas" style="height:200px; width:300px;"></div>
    </td>
    <td>
      <div id="info"></div>
    </td>
  </tr>
</table>

 30 июл. 2017 г., 20:24
Конечно. Не уверен, о каком примере вы спрашиваете, но это звучит как другой вопрос
 31 июл. 2017 г., 11:46
 30 июл. 2017 г., 15:11
Все примеры и ссылки работают на меня. Похоже, это может быть проблемой на вашей стороне.
 30 июл. 2017 г., 16:28
Можно ли распространить ваш пример на две страны?
 31 июл. 2017 г., 15:07
ты имеешь в видуview-source? Я не понимаю, что вы имеете в виду под "Я хотел бы дать список для рисунка". (но опять же, это не тема для комментариев, это новый вопрос).

получив границы, вы хотите нарисовать многоугольник на их границах. Для этого вы должны знать координаты, которые помогут нарисовать многоугольник. Я сделал это только для США. У меня есть все координаты всех государств. И я рисую многоугольник в каждом штате. Это делает США выделенными.

Вы можете увидеть этовопрос для решения США. Но для других стран вам необходимо знать координаты.

Ваш ответ на вопрос