精华内容
下载资源
问答
  • 截止发文时间,博主“LZUGIS”CSDN博客文章总访问量突破50W,值此特殊的时刻,特发此文,以表纪念与督促。
    截止发文时间,博主“LZUGIS”CSDN博客文章总访问量突破50W,值此特殊的时刻,特发此文,以表纪念与督促。


    博客详情


    博客专栏


    公众号

    常言道:不积跬步,无以至千里;不积小流,无以成江河。博主LZUGIS用自己的努力证明了这句话。从2004年年底创建博客开始,博主不忘初心、勤于耕耘,用自己的方式在为GIS这个产业做着微薄的贡献:从博客开始,到QQ群,到CSDN讲堂,再到公众号,最后到现在的牛讲堂,无时无刻,都在努力用自己的光去照亮GIS这条不太平坦的道路。



    “传播GIS知识 | 交流GIS经验 | 分享GIS价值 | 专注GIS发展“,这是我在创建从博客到“牛讲堂”一系列的东西的时候的初心,从博客创建初,到“牛讲堂”举办,虽然能够影响的人不多,但是我一直在坚持以自己的方式去尽着微薄的力量。我想,接下来的路,除了尽早把“牛讲堂之项目实战”课程开起来之外,应该从行业的角度更加深入的给大家带来更有油水的文章,在此也欢迎志同道合的朋友一起加入!
    2017年7月9日晚9点
    LZUGIS      


    展开全文
  • lzugis——Arcgis Server for JavaScript API之POI

    POI(Point Of Interest),感兴趣点,其实呢,严格意义上说应该不是POI,但是单位就这样叫了,我也就这样叫了,其实现的功能大致是这样的:用过百度地图的朋友们都知道你在百度地图时,当鼠标经过某个点时会显示这个对象的名称,点击该对象,会弹出该对象的详细信息。如下图所示:


    实现后的效果呢就是这样子的,下面呢我来说说在Arcgis Server for JavaScript API下,我实现该效果的思路与想法。


    首先,得有一个图层用于显示这些点对象,这个图层可以是切片,也可以是WMS,也可以是featurelayer,反正只要是能将这些东西在地图上显示出来就Ok了。

    map = new Map("map",{
    	logo:false,
    	center: [106.6854, 35.8364],
    	slider: true
    });
    var tiledLayer = new Tiled(tiledUrl);
    map.addLayer(tiledLayer);	

    接下来说说这些点究竟是怎么回事,其实呢,这些点呢就是一个JSON格式的数据,里面的每一个对象包含了该对象的属性信息,返回的JSON格式的大概如下:

    {
    	total:3,
    	layerpoi:[
    		{poiCode:'0',poiTitle:'wlmq',poix:9748157.53561782,poiy:5429353.112666599 },
    		{poiCode:'1',poiTitle:'hhht',poix:12453416.840686005,poiy:4997253.113785474 },
    		{poiCode:'2',poiTitle:'lz',poix:11528834.54654876,poiy:4319715.295065851 }
    	]
    }
    注意,每一个对象必须得有一个id,name,x,y,前面这四个是必须的,其他的可有可无,至于说怎么返回,这个事情你自己考虑,怎么方便怎么来,asp.net可以用*.ashx,java可以考虑servlet或者别的,反正能返回这个JSON就Ok。那么,我何时请求让他返回呢,有两个时间:1、地图初始化加载的时候;2、地图的extent发生变化的时候。我们可以用ajax来实现:

    function excuteData(dataUrl){
    	$.ajax({
    		type: "post",
    		dataType: "JSON",
    		url: dataUrl,
    		data: {level: mapLevel, bbox: bbox},
    		success: function(json){      					
    			var data = json.layerpoi;
    			total=json.total; 
    			if(total!=0){
    				for(var i in data){
    					var xmin,ymin,xmax,ymax;
    					xmin=data[i].poix-offset;
    					ymin=data[i].poiy-offset;
    					xmax=data[i].poix+offset;
    					ymax=data[i].poiy+offset;
    					var poiExtent = new esri.geometry.Extent(xmin,ymin,xmax,ymax,map.spatialReference);
    					poiArray[i] = new POI(data[i].poiType,data[i].poiTitle,data[i].poix,data[i].poiy,poiExtent);	      							
    				}
    			}
    		}
    	});
    }
    分析上面的代码,ajax请求,传递的参数为level(地图的级别),bbox(地图当前的四至),意思就是通过当前地图的级别和四至判断当前可是范围内所包含的点对象的个数与信息,success后返回JSON,首先,判断total的个数是否为0,不为0,说明有点对象,这时,根据地图的比例尺计算一个合理的offset,根据x、y、offset给每一个点对象创建一个extent,你可以建一个对象类将这些对象点的信息存储起来:

    function POI(code,title,x,y,extent){
    	this.code=code;
    	this.title=title;
    	this.x=x;
    	this.y=y;
    	this.extent=extent;
    }
    接着,实现移动鼠标去判断鼠标当前所在点是否被对象点所包含,包含了,显示该对象的信息,并高亮显示给对象:

    	    //鼠标移动事件
                function mapMouseMove(evt){
                	var point = evt.mapPoint;
                	for(var i = 0; i < poiArray.length; i++){	            		
                		var extent=poiArray[i].extent;	
                		if(extent.contains(point)){
                			console.log("true");
                			poipoint = new esri.geometry.Point([poiArray[i].x,poiArray[i].y],map.spatialReference);
                			var graphicMarker = new esri.Graphic(poipoint, pmsHover);
                			map.graphics.add(graphicMarker);
                			var font  = new esri.symbol.Font();
            			font.setSize("10pt");
            			font.setFamily("微软雅黑");
            			var text = new esri.symbol.TextSymbol(poiArray[i].title);
            			text.setFont(font);
            			text.setColor(new dojo.Color([0,0,0,100]));
            			text.setOffset(15,-20);
            			var graphicLabel = new esri.Graphic(poipoint,text);
            			map.graphics.add(graphicLabel);
                			flag=i;
    				break;
                		}
                		else{
                			console.log("false");
                			map.graphics.clear();          			
                			flag=null;
                		}
                	}
                }
                map.on("mouse-move",mapMouseMove);
    给地图添加鼠标移动事件,当移动到对象出现对象名称时,点击该对象,出现对象的详细信息,所以给地图添加click事件:

    	   function mapClick(evt){
                	if(flag==null){
                		return;
                	}
                	else{
                		map.centerAt(poipoint);
                		map.infoWindow.setTitle(poiArray[flag].title);
        				map.infoWindow.setContent("类型:"+poiArray[flag].type
        						+"<br>X:"+poiArray[flag].x
        						+"<br>Y:"+poiArray[flag].y);
        				map.infoWindow.show(poipoint);
                	}
                }
                map.on("click",mapClick);
    上面说了,请求返回JSON数据的时间有俩,所以还得给地图添加extent-change事件:

    	    function extentChange(evt){
                	mapLevel=map.getLevel();
                	bbox=this.map.extent.xmin+","+this.map.extent.ymin+","+this.map.extent.xmax+","+this.map.extent.ymax;
                	excuteData(dataUrl);
                }
                map.on("extent-change",extentChange);
    这样,我所要的功能就基本上实现了,效果如下:

    初始状态

    鼠标经过时显示该对象的名称并高亮显示

    单击时显示该对象的详细信息
    到此,我的介绍就结束了,欢迎您关注 lzugis
    lzugis,关注GIS,gis路上有我,你并不孤独!






    展开全文
  • lzugis——Arcgis Server for JavaScript API之自定义InfoWindow

    用过Arcgis Server for JavaScript API肯定知道InfoWIndow,你在用InfoWindow的时候会发现各种问题,例如不能完全显示的问题,遮盖对象的问题等等,所以呢我在实现这个功能的时候动了下脑子,想自己用div+css弄一个,倒腾了半天,弄出来了一个如下所示的:


    做的比较丑陋,样式方面还得好好下下功夫,东西是差不多实现了,下面说说思路:

    首先,DIV定义,这个样式,我定义了5个div,分别是infowin,title,colse,content,arrow,其中,infowin是整个InfoWindow的大框架,title为标题,close为关闭按钮,content为主要内容,arrow为下面的小尾巴,我们可以将这个小尾巴做的长一点,以免对象被遮盖的情况,代码为:

        <div id="mapDiv">
        	<div id="infowin">
            	<div id="close" onClick="closeInfoWin()">X</div>
                <div id="title"></div>
                <div id="content"></div>
                <div id="arrow"></div>
            </div>
        </div>

    定义了div就得进行布局,定义样式了,样式为:

        <style>
              html, body, #mapDiv 
    	  {
                    padding:0;
                    margin:0;
                    height:100%;
    		font-size:10px;
    		position: relative;
              }
    	  #infowin
    	  {		  
    		  display:none;
    		  z-index:10000;	  
    	  }
    	  #close
    	  {
    		  float:right;
    		  padding-top:10px;
    		  font-weight:bold;
    		  font-size:12px;
    		  color:#FFF;
    		  border:#000 1px solid;
    		  height:20px;
    		  width:20px;
    		  text-align:center;
    	  }
    	   #close:hover
    	  {
    		  cursor:pointer;
    	  }
    	  #title
    	  {
    		  background-color:#666;
    		  padding:10px;
    		  font-weight:bold;
    		  font-size:12px;
    	  }
    	  #content
    	  {
    		  padding-left:10px;
    		  padding-top:10px;
    		  background-color:#999;
    		  height:200px;
    	  }
    	  #arrow
    	  {
    		  background-image:url(arrow.png);
    		  height:30px;
    	  }
        </style>
    样式定义完之后就得考虑事件了,一般InfoWindow是在点击某个对象时弹出来的,所以我们得定义对象图层的click事件:

    		function leftClick(evt){
    			infowin.style.display="none";
    			
    			var strtitle="城市名称"			
    		  	var strcontent = "****是一座美丽的城市<br><br>****是一座好看的城市<br><br>****是一座富饶的城市<br><br>****是一座漂亮的城市";
    			
    			infowin.style.left=(evt.clientX-width/2)+"px";
    			infowin.style.top=(evt.clientY-height-50)+"px"; 
    			infowin.style.position="absolute";
    			infowin.style.width=width+"px";
    			infowin.style.height=height+"px";
    			infowin.style.display="block";
    			
    			title.innerHTML = strtitle;
    			content.innerHTML = strcontent;
    
    		}
    		//鼠标单击
    		featurelayercity.on("click", leftClick);
    点击对象,在鼠标的点击位置出现,所以我们得将infowin的position样式设为absolute,并定义left和top分别为clientX和clientY,并将其display设置为block,将其显示,实现的详细代码如下:

    <!DOCTYPE html>
    <html>
      <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <!--The viewport meta tag is used to improve the presentation and behavior of the samples 
          on iOS devices-->
        <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no">
        <title>Feature Layer - display results as an InfoWindow onHover</title>
    
        <link rel="stylesheet" href="http://localhost/arcgis_js_api/library/3.8/3.8/js/dojo/dijit/themes/claro/claro.css">
    	<link rel="stylesheet" href="http://localhost/arcgis_js_api/library/3.8/3.8/js/dojo/dijit/themes/tundra/tundra.css">
        <link rel="stylesheet" href="http://localhost/arcgis_js_api/library/3.8/3.8/js/esri/css/esri.css">
    	<style>
          html, body, #mapDiv 
    	  {
            padding:0;
            margin:0;
            height:100%;
    		font-size:10px;
    		position: relative;
          }
    	  #infowin
    	  {		  
    		  display:none;
    		  z-index:10000;	  
    	  }
    	  #close
    	  {
    		  float:right;
    		  padding-top:10px;
    		  font-weight:bold;
    		  font-size:12px;
    		  color:#FFF;
    		  border:#000 1px solid;
    		  height:20px;
    		  width:20px;
    		  text-align:center;
    	  }
    	   #close:hover
    	  {
    		  cursor:pointer;
    	  }
    	  #title
    	  {
    		  background-color:#666;
    		  padding:10px;
    		  font-weight:bold;
    		  font-size:12px;
    	  }
    	  #content
    	  {
    		  padding-left:10px;
    		  padding-top:10px;
    		  background-color:#999;
    		  height:200px;
    	  }
    	  #arrow
    	  {
    		  background-image:url(arrow.png);
    		  height:30px;
    	  }
        </style>    
        <script src="http://js.arcgis.com/3.9/"></script>
        <script>
    	  var infowin,colse,title,content;
    	  
    	  var width=400,height=230;
    	  
    	  var closeInfoWin = function (evt){
    		  infowin=document.getElementById("infowin");
    		  infowin.style.display="none";
    	  };
    
    	  require([
            "esri/map", //地图
    		"esri/layers/ArcGISTiledMapServiceLayer",
    		"esri/layers/FeatureLayer",//特征层
    		"esri/symbols/PictureMarkerSymbol",//图片点符号
            "esri/renderers/SimpleRenderer", //简单渲染
    		"esri/graphic", //图片
    		"esri/lang",		     
    		"dojo/domReady!"
          ], function(
            Map,ArcGISTiledMapServiceLayer,FeatureLayer,PictureMarkerSymbol,SimpleRenderer,esriLang
          ) {
            var map = new Map("mapDiv", {
    		  logo:false,
              center: [106.6854, 35.8364],
              zoom: 4,
              slider: true
            });	
    		
    		var shpServiceURL="***************************************";
    		var shpTitlelayer=new ArcGISTiledMapServiceLayer(shpServiceURL);
    		map.addLayer(shpTitlelayer);
    
    		//--------------------------------------------------------------------------------------------------------
    		var featurelayercity = new FeatureLayer("******************************************************", {
              mode: FeatureLayer.MODE_SNAPSHOT,
              outFields: ["*"]
            });
    	    var pmsRed = new PictureMarkerSymbol('../images/location_icon_blue.png', 20, 20).setOffset(0, 15);
    		//简单渲染
    		var sr=new SimpleRenderer(pmsRed);
    		featurelayercity.setRenderer(sr);		
            map.addLayer(featurelayercity);	
    		
    		infowin = document.getElementById("infowin");
    	 	colse = document.getElementById("close");
    	  	title = document.getElementById("title");
    	  	content = document.getElementById("content");
    		function leftClick(evt){
    			infowin.style.display="none";
    			
    			var strtitle="城市名称"			
    		  	var strcontent = "****是一座美丽的城市<br><br>****是一座好看的城市<br><br>****是一座富饶的城市<br><br>****是一座漂亮的城市";
    			
    			infowin.style.left=(evt.clientX-width/2)+"px";
    			infowin.style.top=(evt.clientY-height-50)+"px"; 
    			infowin.style.position="absolute";
    			infowin.style.width=width+"px";
    			infowin.style.height=height+"px";
    			infowin.style.display="block";
    			
    			title.innerHTML = strtitle;
    			content.innerHTML = strcontent;
    
    		}
    		//鼠标单击
    		featurelayercity.on("click", leftClick);		
          });
        </script>
      </head>
      <body class="tundra">
        <div id="mapDiv">
        	<div id="infowin">
            	<div id="close" onClick="closeInfoWin()">X</div>
                <div id="title"></div>
                <div id="content"></div>
                <div id="arrow"></div>
            </div>
        </div>
      </body>
    </html>
    目前只实现到了这儿, 还有以下问题待解决:1、地图拖动后infowin随着地图的联动;2、地图缩放后infowin随着地图的联动;3、内容不在可视范围时候的移动;4、样式,挺难看的。希望有人实现后共享下代码,造福全GISer。


    lzugis



    展开全文
  • lzugis—搭建属于自己的小型的版本控制SVN

    对于不了解SVN的同志们可以参考下“mh942408056”的这篇博文,SVN简介,链接地址为:http://blog.csdn.net/mh942408056/article/details/7629036


    本文讲述的是如何应用VISUAL SVN SERVER和Dreamweaver CS6搭建自己的程序备份与版本控制。


    首先,得下载安装这两个软件。你可以从VISUAL SVN SERVER的官网上获取到VISUAL SVN SERVER的安装包,VISUAL SVN SERVER的官网地址为http://www.visualsvn.com/,选择下载Server,Dreamweaver的安装在此就不罗嗦了。



    VISUAL SVN SERVER的安装配置采用默认即可。安装完成后打开VISUAL SVN SERVER,界面如下:


    打开VISUAL SVN SERVER后,你可以新建repository或者user或者group对你的SVN进行管理。在此,我建了一个名为iis的repository(仓库),该仓库的URL即为https://lzugis-pc/svn/iis/,同时新建了一个user(用户),至此SVN服务器端的操作基本完成。


    接下来,需要在客户端用Dreamweaver端配置。配置的步骤如下:

    1、打开Dreamweaver的站点管理,选择要管理的站点,编辑站点。


    2、选择版本控制,填写相关配置,点击测试。


    3、测试成功后,弹出测试成功结果。


    4、点击确定,此时,SVN的配置已经完成。此时去看Dreamweaver,会显示各种状态,如下:


    此时,所有的操作已经完成。你也可以下载TortoiseSVN作为客户端用以管理你的文档。


    软件下载地址:http://pan.baidu.com/s/1jGoRcr0

    展开全文
  • 版权声明:本文为LZUGIS原创文章,未经同意不得转载。 https://blog.csdn.net/GISShiXiSheng/article/details/28643575 ...
  • lzugis——Arcgis Server for JavaScript API之自定义InfoWindow(续)
  • 用过Arcgis Server for JavaScript API肯定知道InfoWIndow。你在用InfoWindow的时候会发现各种问题,比如不能全然显示的问题,遮盖对象的问题等等。所以呢我在实现这个功能的时候动了下脑子,想自己用...lzugis
  • 你看到这个标题嫌烦。因为我最近一直与研究问题,相关文章使这些也可以只,同时要读我文章的朋友。我的文章能够给你带来帮助。 ...在相关的内部的前两篇文章,达到InfoWindow经div实现的东西,成InfoWindowBase...
  • geotools等值线生成

    千次阅读 2018-06-03 14:28:44
    概述 前文中,提到了等值面的生成,后面有人经常会问等值线的生成,本文在前文的基础上做了...package com.lzugis.geotools; import com.amazonaws.util.json.JSONObject; import com.lzugis.CommonMethod; import...
  • 概述 用到Oracle Spatial就很难避免shp文件的入库问题,虽然有shp2sdo工具,但是用起来不是很习惯,所以,本文讲述...package com.lzugis.geotools; import com.lzugis.CommonMethod; import com.vividsolutions....
  • 关于微信公众号投票结果的通告

    千次阅读 2016-11-07 07:47:34
    为更好地为广大的GIS友们提供更加专业、贴近大家所需的文章,公众号lzugis15与上周一发起了关于GIS公众号内容的投票,经过一个星期的头片,现将投票结果做如下通报。
  • 牛老师的“智囊库”

    千次阅读 2018-05-10 11:31:32
    概述 本文,牛老师给大家分享一些自己平常工作和学习常用的网站或资源,希望对大家有所帮助...2) lzugis 说明:主要为后端代码库,包括一些常见的Geotools操作等。 3) 我的博客 4) Arcgis for js教程 5) ...
  • geotools实现两个shp的相交计算

    千次阅读 2018-08-29 07:13:52
    概述 在Armap工具箱‘分析工具-&gt;叠加分析’,不得不说,非常好用,本文给你讲讲如何在geotools中实现。 关键点 ...要实现类似的功能有两个关键点: 1、已经计算过的两个数据不...package com.lzugis.test;...
  • 有用的网址

    2017-01-22 11:22:42
    http://lzugis.d152.ptzygj.com/
  • 这篇文章主要介绍了 jquery 自定义插件开发之 window 的实现过程的相关资料 ,需要的朋 友可以参考下 本例子实现弹窗的效果如果亲感觉效果还不错请继续往下阅读 1jquery.show.js /* * 开发者 lzugis * 开发时间 2014 ...
  • selectToUISlider

    2019-04-06 12:20:00
    版权声明:本文为LZUGIS原创文章,未经同意不得转载。 https://blog.csdn.net/GISShiXiSheng/article/details/24304321 ...
  • * 开发者:lzugis * 开发时间:2014年6月10日 * 实现功能:点击在鼠标位置显示div * 版本序号:1.0 */ (function($){ $.fn.showDIV = function(options){ var defaults = {}; var options = $.extend(defaults, ...
  • package com.lzugis.test; import com.alibaba.fastjson.JSONObject; import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.geom.MultiPolygon; import org.geotools.data.Featur...
  • geotools读取shp文件及shp文件操作工具类代码....import com.lzugis.helper.CommonConfig; import com.vividsolutions.jts.geom.*; import com.vividsolutions.jts.io.WKTReader; import com.vividsolutions.jts.io.W
  • python图像切割

    千次阅读 2018-04-01 01:24:29
    @author lzugis @date 2017-06-02 @brief 利用shp裁剪影像 """ from osgeo import gdal, gdalnumeric, ogr,gdal_array from PIL import Image, ImageDraw import os import operator f...
  • 实现:生成后的图片实现代码:package com.lzugis.geotools; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Rectangle; import java.awt.RenderingHints; import jav...
  • 概述:本文讲述如何在geotools中...效果:实现代码:package com.lzugis.geotools; import java.io.File; import java.io.Serializable; import java.nio.charset.Charset; import java.util.Collection; import...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 522
精华内容 208
关键字:

lzugis