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> |