`

MySQL gis 判断某个点是否在多边形中

gis 
阅读更多

!!!!!!  取得点为 多边形的最小矩形里面的点。加入java进行第二次判断。

建表:

CREATE TABLE `test` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `pnt` point DEFAULT NULL,

  `pgn` polygon DEFAULT NULL,

  PRIMARY KEY (`id`)

) ENGINE=MyISAM AUTO_INCREMENT=18 DEFAULT CHARSET=utf8;

 

插入数据:

INSERT INTO `test` VALUES ('12', GeomFromText('POINT(1 1)'), null);

INSERT INTO `test` VALUES ('11', GeomFromText('POINT(1 1)'), null);

INSERT INTO `test` VALUES ('1', GeomFromText('POINT(1 1)'), null);

INSERT INTO `test` VALUES ('2', GeomFromText('POINT(1 5)'), null);

INSERT INTO `test` VALUES ('3', GeomFromText('POINT(2 2)'), null);

INSERT INTO `test` VALUES ('4', GeomFromText('POINT(2 3)'), null);

INSERT INTO `test` VALUES ('5', GeomFromText('POINT(3 2)'), null);

INSERT INTO `test` VALUES ('8', GeomFromText('POINT(2 3)'), null);

INSERT INTO `test` VALUES ('7', GeomFromText('POINT(2 2)'), null);

INSERT INTO `test` VALUES ('9', GeomFromText('POINT(12 12)'), null);

INSERT INTO `test` VALUES ('10', null, null);

INSERT INTO `test` VALUES ('13', null, GeomFromText('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0), (5 5, 7 5, 7 7, 5 7, 5 5))'));

INSERT INTO `test` VALUES ('14', null, GeomFromText('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))'));

INSERT INTO `test` VALUES ('15', null, GeomFromText('POINT(4 4)'));

INSERT INTO `test` VALUES ('16', GeomFromText('POINT(4 4)'), null);

INSERT INTO `test` VALUES ('17', GeomFromText('POINT(4 4)'), null);

 

 

——————————————————————————————

插入点point:

INSERT INTO test VALUE ('17',GeomFromText('POINT(4 4)'),NULL);

插入点多边形:

INSERT INTO test VALUE ('14',NULL,GeomFromText('POLYGON((0 0,10 0,10 10,0 10,0 0))'));

判断点在哪个多边形内:

select id from test where MBRContains(pgn, GeomFromText('Point(1 1)'));

 

 

Java 判断某个点是否在多边形内。

 

package com.fjxhx.business.dida.action;

import java.awt.geom.Point2D;
import java.util.ArrayList;
import java.util.List;

import com.fjxhx.business.dida.model.NetgridModel;
import com.fjxhx.business.dida.model.OrderModel;
import com.fjxhx.business.system.action.BaseAction;

public class TestGis extends BaseAction{

	 /**
     * 判断当前位置是否在围栏内
     */
	
	//dlist为某个多变形的所有点
	 public boolean isInPolygon(OrderModel order,List<NetgridModel> dlist){
		 double p_x =Double.parseDouble(order.getLocationX());
		 double p_y =Double.parseDouble(order.getLocationY());
		 Point2D.Double point = new Point2D.Double(p_x, p_y);

		 List<Point2D.Double> pointList= new ArrayList<Point2D.Double>();
		 
		 for (NetgridModel enclosure : dlist){
			 double polygonPoint_x=Double.parseDouble(enclosure.getLonX());
			 double polygonPoint_y=Double.parseDouble(enclosure.getLatY());
			 Point2D.Double polygonPoint = new Point2D.Double(polygonPoint_x,polygonPoint_y);
			 pointList.add(polygonPoint);
		 }
		 TestGis test = new TestGis();
		 return test.checkWithJdkGeneralPath(point,pointList);
	 }
	 /**
	  * 返回一个点是否在一个多边形区域内
	  * @param point
	  * @param polygon
	  * @return
	  */
	private boolean checkWithJdkGeneralPath(Point2D.Double point, List<Point2D.Double> polygon) {
	       java.awt.geom.GeneralPath p = new java.awt.geom.GeneralPath();

		   Point2D.Double first = polygon.get(0);
		   p.moveTo(first.x, first.y);
		   polygon.remove(0);
		   for (Point2D.Double d : polygon) {
		      p.lineTo(d.x, d.y);
		   }

		   p.lineTo(first.x, first.y);

		   p.closePath();

		   return p.contains(point);

		}
	
	public static void main(String[] args) {
		
		/*OrderModel order=new OrderModel();
		order.setLocationX("3");
		order.setLocationY("1.5");
		
		List<NetgridModel> nlist = new ArrayList<NetgridModel>();
		NetgridModel ne =new NetgridModel();
		NetgridModel ne1 =new NetgridModel();
		NetgridModel ne2=new NetgridModel();
		NetgridModel ne3=new NetgridModel();
		
		ne.setLonX("2");
		ne.setLatY("0");
		nlist.add(0, ne);
		
		ne1.setLonX("0");
		ne1.setLatY("2");
		nlist.add(1, ne1);
		
		ne2.setLonX("2");
		ne2.setLatY("4");
		nlist.add(2, ne2);
		
		ne3.setLonX("4");
		ne3.setLatY("2");
		nlist.add(3, ne3);
		
		TestGis test = new TestGis();
		System.out.println(test.isInPolygon(order, nlist));*/
	}

}

 

分享到:
评论

相关推荐

    判断指定的经纬度坐标点是否落在指定的多边形区域内

    在矢量多边形区域中,一个坐标点的位置是否在区域内 算法: C#代码,适用于任意多边形(凹凸多边形),但是没有考虑实际误差范围的情况(应用在实际问题解决中,接近区域一定范围是可以忽略的,这个误差范围考虑后算法的...

    判断点是否在面内

    在计算机图形学和地理信息系统(GIS)中,判断一个点是否位于一个多边形内部是一个常见的问题。本示例是基于SuperMap iClient 6R for JavaScript的开发模式,该库是一个强大的Web GIS开发工具,提供了丰富的空间分析...

    探索MySQL地理空间数据的奥秘:GIS功能全解析

    MySQL的GIS功能不仅支持常见的地理空间数据类型如点(Point)、线(LineString)、多边形(Polygon)等,还提供了丰富的空间函数,如计算距离(ST_Distance)、判断位置关系(ST_Within、ST_Intersects)等功能,...

    GIS地图导入数据库

    通过Oracle Spatial,用户可以将地图数据如矢量图层(点、线、多边形)、栅格图层等转换为数据库中的空间对象,并进行空间操作。 "GIS地图自动导入Oracle空间数据库的全套工具"通常是一组脚本、应用程序或服务,...

    shapefile格式转mysql格式工具

    转换后的数据可以在MySQL中进行复杂的地理空间查询,例如,搜索某个区域内的点,找出两个地理元素之间的距离,或者分析地理特征的分布情况。这在地理信息系统、城市规划、环境科学、交通运输等领域都有广泛应用。 ...

    shp2mysql工具

    【shp2mysql工具】是一种专门用于将地理信息系统(GIS)中的Shapefile(.shp)格式数据转换并导入到MySQL空间数据库的应用程序。Shapefile是Esri公司开发的一种广泛使用的矢量数据格式,通常包含地理坐标和属性信息...

    shp2mysql_0_4.rar

    SHP文件是地理信息系统(GIS)中常用的一种矢量数据格式,用于存储地理空间特征,如点、线和多边形。而MySQL是一种流行的关系型数据库管理系统,用于存储和管理结构化数据。 描述“将shp格式的文件转换为mysql可以...

    将shp文件导入到mysql完整过程及代码实现

    这种格式包含了地理空间对象的信息,如点、线和多边形。在需要将这些数据集成到关系数据库系统,如MySQL时,我们需要进行数据转换。本文将详细介绍如何将.shp文件导入到MySQL数据库,并提供相关的代码实现。 首先,...

    geoserver-2.12.5-mysql-plugin.zip

    这个特定的JAR文件提供了对MySQL数据库的适配器,使得GeoServer能够识别和处理MySQL中的几何类型,如点、线和多边形。它也支持MySQL特定的空间函数,使得空间查询和操作变得更加便捷。 `mysql-readme.txt`文件通常...

    [GIS]KingbaseES_V8_GIS数据迁移方案.pdf

    KingbaseES V8版本能够替代诸如Oracle、MySQL等国外数据库产品,满足各类组织机构在管理信息系统、业务及生产系统、决策支持系统等方面进行国产化改造升级的需求。 #### 第二章 KingbaseES GIS 数据库迁移方案 GIS...

    shp2mysql-win-64_6666_

    在GIS中,Perl可以用于读取、处理和转换各种空间数据格式,比如在本例中,可能用于解析Shapefile并构建SQL语句来插入到MySQL数据库。 5. **GIS数据导入/导出**:GIS软件通常支持多种数据格式的导入和导出,shp2...

    GISKingbaseES-V8-GIS数据迁移方案.pdf

    在KingbaseES GIS的数据类型中,包括了矢量数据、栅格数据以及三维数据。矢量数据由点、线、面等几何对象组成,支持单个对象及集合对象集。栅格数据利用像元值来表达地理信息,KingbaseES支持GDAL格式,如tif、img等...

    商圈数据库(含经纬度),mysql直接导入

    3. **边界信息**:商圈的边界可能用多边形或者一系列坐标点来定义,这有助于计算商圈内的面积,以及判断其他点是否在商圈范围内。 4. **商业信息**:商圈内可能包含各类商业实体,如商场、餐馆、酒店等,这些实体的...

    Visual C++开发GIS系统(第2版)

    在Visual C++中开发GIS系统,主要涉及以下几个方面的知识点: 1. **C++基础知识**:首先,你需要掌握C++编程语言的基本语法、类和对象、指针、函数、模板等核心概念,这是使用任何C++开发工具的基础。 2. **MFC...

    GeoSparkDemo.rar

    在这个例子中,GIS主要体现在对Shapefile数据的处理上。 3. **Shapefile (shp)**: Shapefile是Esri公司开发的一种常见的地理空间数据格式,用于存储地理实体,如点、线和多边形。每个Shapefile通常包括.shp(几何...

    gis-spark:适用于正常时空数据的Spark扩展

    该存储库仍在开发中。 层的时空数据读取器和写入器(实际上是JavaPairRDD): Postgis CSV档案(wkt中的几何图形) Shp(仅限读者) MongoDB(仅作家) ES MySQL Platform Reader(用于读取我们的大...

    FWtools 2.4.7

    在FWtools 2.4.7中, ogr2ogr可以用于将shapefile数据转换为MySQL的spatial扩展格式,从而实现GIS数据与数据库的交互。 4. **命令行接口** FWtools的全部功能都可通过命令行界面来调用,这赋予了高级用户和开发者...

    空间数据库实习SQL保存点和线

    在GIS中,点、线和面是基础的空间数据元素,用于表示地图上的各种地理实体,如城市、道路、河流等。在本实习项目中,我们将探讨如何使用SQL与空间数据库交互,实现这些几何对象的存储和检索。 首先,我们需要了解...

    行政区划数据(含中心点和边界数据)_2018

    在本案例中,这些中心点信息可能存储在SQL脚本中,可以通过SQL查询来获取和处理。 “边界数据”则是指行政区域的地理边界,通常以多边形的形式表示。这些数据描述了行政区域的形状和范围,可以用于绘制行政区域地图...

    2023最新地图数据,包含省市区,坐标,geo

    在数据库中存储和查询地理数据时,可以利用MySQL的Spatial函数,如ST_GeomFromText用于创建几何对象,ST_Contains用于检查一个几何对象是否包含另一个,以及ST_Distance计算两个几何对象之间的距离等。这样,你可以...

Global site tag (gtag.js) - Google Analytics