地图平台:leaflet
语言:js
index.html
[html] view plain copy
- <!DOCTYPE html>
- <html>
- <head>
- <title>Leaflet 快速开始指南示例</title>
- <meta charset="utf-8" />
- <link rel="stylesheet" href="css/leaflet.css" />
- </head>
- <body>
- <div id="map" style="width: 1024px; height: 768px"></div>
- <script src="js/leaflet.js"></script>
- <script type="text/javascript" src="js/jquery-2.0.3.min.js"></script>
- <script type="text/javascript" src="js/isPointInPolygon.js"></script>
- <script>
- var map = L.map('map').setView([24, 110], 5);
- L.tileLayer('https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}.png?access_token=pk.eyJ1IjoibWFwYm94IiwiYSI6IjZjNmRjNzk3ZmE2MTcwOTEwMGY0MzU3YjUzOWFmNWZhIn0.Y8bhBaUMqFiPrDRW9hieoQ', {
- maxZoom: 18,
- attribution: 'Map data © <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, ' +
- '<a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, ' +
- 'Imagery © <a href="http://mapbox.com">Mapbox</a>',
- id: 'mapbox.streets'
- }).addTo(map);
- L.marker([24, 100]).addTo(map)
- .bindPopup("<b>Hello world!</b><br />我是一个冒泡窗").openPopup();
- L.circle([24, 100], 500, {
- color: 'red',
- fillColor: '#f03',
- fillOpacity: 0.5
- }).addTo(map).bindPopup("我是一个圆");
- L.polygon([{
- lat: 26,
- lng: 101
- }, {
- lat: 24,
- lng: 120
- }, {
- lat: 35,
- lng: 110
- }]).addTo(map);
- var popup = L.popup();
- function points() {
- var points = [{
- lat: 26,
- lng: 101
- }, {
- lat: 24,
- lng: 120
- }, {
- lat: 35,
- lng: 110
- }]
- return points;
- }
- function onMapClick(e) {
- popup
- .setLatLng(e.latlng)
- .setContent("你刚点击的坐标是 " + e.latlng.toString())
- .openOn(map);
- /*var hh = IsPtInPoly(119.44336,25.20494, points());*/
- var hh = IsPtInPoly(e.latlng.lng,e.latlng.lat, points());
- alert(hh);
- }
- map.on('click', onMapClick);
- </script>
- </body>
- </html>
isPointInPolygon.js
[javascript] view plain copy
- function IsPtInPoly(ALon, ALat, APoints) {
- var iSum = 0,
- iCount;
- var dLon1, dLon2, dLat1, dLat2, dLon;
- if (APoints.length < 3) return false;
- iCount = APoints.length;
- for (var i = 0; i < iCount; i++) {
- if (i == iCount - 1) {
- dLon1 = APoints[i].lng;
- dLat1 = APoints[i].lat;
- dLon2 = APoints[0].lng;
- dLat2 = APoints[0].lat;
- } else {
- dLon1 = APoints[i].lng;
- dLat1 = APoints[i].lat;
- dLon2 = APoints[i + 1].lng;
- dLat2 = APoints[i + 1].lat;
- }
- //以下语句判断A点是否在边的两端点的水平平行线之间,在则可能有交点,开始判断交点是否在左射线上
- if (((ALat >= dLat1) && (ALat < dLat2)) || ((ALat >= dLat2) && (ALat < dLat1))) {
- if (Math.abs(dLat1 - dLat2) > 0) {
- //得到 A点向左射线与边的交点的x坐标:
- dLon = dLon1 - ((dLon1 - dLon2) * (dLat1 - ALat)) / (dLat1 - dLat2);
- if (dLon < ALon)
- iSum++;
- }
- }
- }
- if (iSum % 2 != 0)
- return true;
- return false;
- }