253 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			253 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
|  | <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="LocationSelect.aspx.cs" Inherits="FineUIPro.Web.HSSE.Hazard.LocationSelect" %> | |||
|  | 
 | |||
|  | <!DOCTYPE html> | |||
|  | <style> | |||
|  |     body, | |||
|  |     html, | |||
|  |     #container { | |||
|  |         overflow: hidden; | |||
|  |         width: 100%; | |||
|  |         height: 100%; | |||
|  |         margin: 0; | |||
|  |         font-family: "微软雅黑"; | |||
|  |     } | |||
|  |     </style> | |||
|  | <html xmlns="http://www.w3.org/1999/xhtml"> | |||
|  | <head runat="server"> | |||
|  |     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> | |||
|  |     <title></title> | |||
|  |     <link href="../res/css/common.css" rel="stylesheet" type="text/css" /> | |||
|  | </head> | |||
|  | <body> | |||
|  |     <form id="form1" runat="server"> | |||
|  |         <f:PageManager ID="PageManager1" AutoSizePanelID="RegionPanel1" runat="server" /> | |||
|  |         <f:RegionPanel ID="RegionPanel1" ShowBorder="false" runat="server" Margin="5px"> | |||
|  |             <Regions> | |||
|  |                 <f:Region ID="Region2" ShowBorder="false" ShowHeader="false" Position="Center" Layout="VBox" | |||
|  |                     BoxConfigAlign="Stretch" BoxConfigPosition="Left" runat="server" BodyPadding="0 5 0 0"> | |||
|  |                     <Items> | |||
|  |                          <f:ContentPanel ID="ContentPanel1" CssClass="bodyregion" ShowBorder="false" ShowHeader="false" runat="server" Height="500px"> | |||
|  |                                      <div id="map" style="width:835px;height:500px"></div> | |||
|  |                          </f:ContentPanel> | |||
|  |                         <f:Form ID="SimpleForm1" ShowBorder="false" ShowHeader="false" AutoScroll="true" | |||
|  |                                 BodyPadding="10px" runat="server" RedStarPosition="BeforeText" LabelAlign="Left"> | |||
|  |                             <Toolbars> | |||
|  |                                 <f:Toolbar ID="Toolbar1" Position="Bottom" ToolbarAlign="Right" runat="server"> | |||
|  |                                     <Items> | |||
|  |                                         <f:ToolbarFill ID="ToolbarFill1" runat="server"> | |||
|  |                                         </f:ToolbarFill> | |||
|  |                                         <f:Button ID="btnSave" ToolTip="保存" Icon="SystemSave" runat="server" Text="" | |||
|  |                                                     OnClick="btnSave_Click"> | |||
|  |                                          </f:Button> | |||
|  |                                     </Items> | |||
|  |                                 </f:Toolbar> | |||
|  |                             </Toolbars> | |||
|  |                             <Rows>  | |||
|  |                                 <f:FormRow> | |||
|  |                                     <Items> | |||
|  |                                  <f:TextBox ID="txtLoc" runat="server" Label="坐标" Required="true"       LabelWidth="60px"    ShowRedStar="true"    FocusOnPageLoad="true" ></f:TextBox> | |||
|  |                                     </Items> | |||
|  |                                 </f:FormRow> | |||
|  |                            </Rows>  | |||
|  |                        </f:Form> | |||
|  |                     </Items> | |||
|  |                 </f:Region> | |||
|  |             </Regions> | |||
|  |         </f:RegionPanel> | |||
|  |     </form> | |||
|  | </body> | |||
|  | </html> | |||
|  |  <link type="text/css" href="../../res/ol/ol.css" rel="stylesheet"/> | |||
|  |  <script type="text/javascript" src="../../res/ol/ol.js" charset="utf-8"></script> | |||
|  |  <script type="text/javascript" src="../../res/ol/bd09.js" charset="utf-8"></script> | |||
|  |  <script type="text/javascript"> | |||
|  |     F.ready(function () { | |||
|  |         var txtLoc = "<%=txtLoc.ClientID%>" | |||
|  |         /*定义百度投影,这是实现无偏移加载百度地图离线瓦片核心所在。 | |||
|  |       网上很多相关资料在用OpenLayers加载百度地图离线瓦片时都认为投影就是EPSG:3857(也就是Web墨卡托投影)。 | |||
|  |       事实上这是错误的,因此无法做到无偏移加载。 | |||
|  |       百度地图有自己独特的投影体系,必须在OpenLayers中自定义百度投影,才能实现无偏移加载。 | |||
|  |       百度投影实现的核心文件为bd09.js,在迈高图官网可以找到查看这个文件。*/ | |||
|  |         var projBD09 = new ol.proj.Projection({ | |||
|  |             code: 'BD:09', | |||
|  |             extent: [-20037726.37, -11708041.66, 20037726.37, 12474104.17], | |||
|  |             units: 'm', | |||
|  |             axisOrientation: 'neu', | |||
|  |             global: false | |||
|  |         }); | |||
|  | 
 | |||
|  |         ol.proj.addProjection(projBD09); | |||
|  |         ol.proj.addCoordinateTransforms("EPSG:4326", "BD:09", | |||
|  |             function (coordinate) { | |||
|  |                 return lngLatToMercator(coordinate); | |||
|  |             }, | |||
|  |             function (coordinate) { | |||
|  |                 return mercatorToLngLat(coordinate); | |||
|  |             } | |||
|  |         ); | |||
|  | 
 | |||
|  |         /*定义百度地图分辨率与瓦片网格*/ | |||
|  |         var resolutions = []; | |||
|  |         for (var i = 0; i <= 18; i++) { | |||
|  |             resolutions[i] = Math.pow(2, 18 - i); | |||
|  |         } | |||
|  | 
 | |||
|  |         var tilegrid = new ol.tilegrid.TileGrid({ | |||
|  |             origin: [0, 0], | |||
|  |             resolutions: resolutions | |||
|  |         }); | |||
|  | 
 | |||
|  |         /*加载百度地图离线瓦片不能用ol.source.XYZ,ol.source.XYZ针对谷歌地图(注意:是谷歌地图)而设计, | |||
|  |         而百度地图与谷歌地图使用了不同的投影、分辨率和瓦片网格。因此这里使用ol.source.TileImage来自行指定 | |||
|  |         投影、分辨率、瓦片网格。*/ | |||
|  |         var source = new ol.source.TileImage({ | |||
|  |             projection: "BD:09", | |||
|  |             tileGrid: tilegrid, | |||
|  |             tileUrlFunction: function (tileCoord, pixelRatio, proj) { | |||
|  |                 //openlayer5的版本 | |||
|  |                 var z = tileCoord[0]; | |||
|  |                 var x = tileCoord[1]; | |||
|  |                 var y = tileCoord[2]; | |||
|  |                 var projectCode = '<%=ProjectCode%>' | |||
|  |                 return '../../File/Map/' + projectCode + '/tiles/' + z + '/tile-' + x + '_' + y + '.png'; | |||
|  |                 //return '../../File/Map/SD1-PC-2023-001/tiles/' + z + '/tile-' + x + '_' + y + '.png'; | |||
|  | 
 | |||
|  |             } | |||
|  |         }); | |||
|  | 
 | |||
|  |         var mapLayer = new ol.layer.Tile({ | |||
|  |             source: source | |||
|  |         }); | |||
|  | 
 | |||
|  |         let map = new ol.Map({ | |||
|  |             layers: [ | |||
|  |                 mapLayer | |||
|  |             ], | |||
|  |             view: new ol.View({ | |||
|  |                 center: ol.proj.transform([5, 5], 'EPSG:4326', 'BD:09'), | |||
|  |                 projection: 'BD:09', | |||
|  |                 zoom: 5 | |||
|  |             }), | |||
|  |             target: 'map' | |||
|  |         }); | |||
|  | 
 | |||
|  | 
 | |||
|  | 
 | |||
|  |         var marker = null; | |||
|  |         var markerLayer = null; | |||
|  | 
 | |||
|  |         map.on('click', function (evt) { | |||
|  |             //map.clearOverlays(); | |||
|  |             if (marker != null && markerLayer != null) { | |||
|  |                 markerLayer.getSource().removeFeature(marker); | |||
|  |             } | |||
|  | 
 | |||
|  | 
 | |||
|  |             var coordinate = evt.coordinate;        //鼠标单击点的坐标 | |||
|  |             //新建一个要素ol.Feature | |||
|  | 
 | |||
|  |              | |||
|  |             //实例化Vector要素,通过矢量图层添加到地图容器中 | |||
|  |             var iconFeature = new ol.Feature({ | |||
|  |                 geometry: new ol.geom.Point(coordinate), | |||
|  | 
 | |||
|  |             }) | |||
|  |             marker = iconFeature; | |||
|  |             iconFeature.setStyle(createLabelStyle(iconFeature)) | |||
|  |             //矢量标注的数据源 | |||
|  |             var vectorSource = new ol.source.Vector({ | |||
|  |                 features: [iconFeature], | |||
|  |             }) | |||
|  |             //矢量标注图层 | |||
|  |             var vectorLayer = new ol.layer.Vector({ | |||
|  |                 source: vectorSource, | |||
|  |             }) | |||
|  |             markerLayer = vectorLayer; | |||
|  |             map.addLayer(vectorLayer) | |||
|  | 
 | |||
|  |             F(txtLoc).setValue(coordinate[0] + ';' + coordinate[1]) | |||
|  | 
 | |||
|  | 
 | |||
|  | 
 | |||
|  |         }); | |||
|  | 
 | |||
|  |         var createLabelStyle = function (feature) { | |||
|  |             return new ol.style.Style({ | |||
|  |                 /**{olx.style.IconOptions}类型*/ | |||
|  |                 image: new ol.style.Icon({ | |||
|  |                     anchor: [0.5, 60], | |||
|  |                     anchorOrigin: 'top-right', | |||
|  |                     anchorXUnits: 'fraction', | |||
|  |                     anchorYUnits: 'pixels', | |||
|  |                     offsetOrigin: 'top-right', | |||
|  |                     // offset:[0,10], | |||
|  |                     //图标缩放比例 | |||
|  |                     // scale:0.5, | |||
|  |                     //透明度 | |||
|  |                     //opacity: 0.75, | |||
|  |                     //图标的url | |||
|  |                     src: '../../File/Image/loc.png', | |||
|  |                 }) | |||
|  |             }) | |||
|  |         } | |||
|  |         var txtloc = F(txtLoc).getValue(); | |||
|  |          | |||
|  |         if (txtloc != null && txtloc != '') { | |||
|  |             var lng = txtloc.split(";")[0]; | |||
|  |             var lat = txtloc.split(";")[1]; | |||
|  |             //实例化Vector要素,通过矢量图层添加到地图容器中 | |||
|  |             var iconFeature = new ol.Feature({ | |||
|  |                 geometry: new ol.geom.Point([Number(lng), Number(lat)]), | |||
|  | 
 | |||
|  |             }) | |||
|  |             marker = iconFeature; | |||
|  |             iconFeature.setStyle(createLabelStyle(iconFeature)) | |||
|  |             //矢量标注的数据源 | |||
|  |             var vectorSource = new ol.source.Vector({ | |||
|  |                 features: [iconFeature], | |||
|  |             }) | |||
|  |             //矢量标注图层 | |||
|  |             var vectorLayer = new ol.layer.Vector({ | |||
|  |                 source: vectorSource, | |||
|  |             }) | |||
|  |             markerLayer = vectorLayer; | |||
|  |             map.addLayer(vectorLayer); | |||
|  |         } | |||
|  |         //var tileLayer = new BMap.TileLayer(); | |||
|  |         //tileLayer.getTilesUrl = function (tileCoord, zoom) { | |||
|  |         //    var x = tileCoord.x; | |||
|  |         //    var y = tileCoord.y; | |||
|  |         //    return '../../File/Map/SD1-PC-2023-001/tiles/' + zoom + '/tile-' + x + '_' + y + '.png'; | |||
|  |         //} | |||
|  |         //var MyMap = new BMap.MapType('MyMap', tileLayer, { minZoom: 3, maxZoom: 8 }); | |||
|  |         //var map = new BMap.Map('map', { mapType: MyMap }); | |||
|  |         //map.addControl(new BMap.NavigationControl( )); | |||
|  |         //map.centerAndZoom(new BMap.Point(0, 0), 5); | |||
|  |         ////map.addEventListener('click', function (e) { | |||
|  |         ////    alert('点击位置经纬度:' + e.latlng.lng + ',' + e.latlng.lat); | |||
|  |         ////   // var marker1 = new BMap.Marker(new BMap.Point(e.latlng.lng, e.latlng.lat)); | |||
|  |         ////// 在地图上添加点标记 | |||
|  |         ////map.addOverlay(marker1); | |||
|  | 
 | |||
|  |         ////}); | |||
|  | 
 | |||
|  |         //map.addEventListener("click", function (e) { | |||
|  |         //    map.clearOverlays(); | |||
|  |         //    var marker1 = new BMap.Marker(new BMap.Point(e.Dg.lng, e.Dg.lat)); | |||
|  |         //    //// 在地图上添加点标记 | |||
|  |         //    map.addOverlay(marker1); | |||
|  |         //    F( txtLoc).setValue(e.Dg.lng+';'+e.Dg.lat) | |||
|  |         //} | |||
|  |         //); | |||
|  |         //var txtloc = F(txtLoc).getValue(); | |||
|  |         //if (txtloc != null && txtloc != '') { | |||
|  |         //    var lng = txtloc.split(";")[0]; | |||
|  |         //    var lat = txtloc.split(";")[1]; | |||
|  |         //    var marker1 = new BMap.Marker(new BMap.Point(lng, lat)); | |||
|  |         //    //// 在地图上添加点标记 | |||
|  |         //    map.addOverlay(marker1); | |||
|  |         // } | |||
|  |   | |||
|  |     }); | |||
|  | 
 | |||
|  |  </script> |