자바 GeoTools 를 사용 하여 shp 파일 을 읽 고 그림 을 그 리 는 작업 코드
shp 파일 자 체 는 지리 적 대상 경계 좌표,대상 중심 도시 및 도시 번호 가 저 장 된 다 다각형 문자열 입 니 다.
사용 할 의존 도 는 다음 과 같 습 니 다.
<!-- GeoTools -->
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-shapefile</artifactId>
<version>${geotools.version}</version>
</dependency>
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-swing</artifactId>
<version>${geotools.version}</version>
</dependency>
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
대상:
public class CutProperty {
private String province;
private int x;
private int y;
/**
*
* */
private int width;
/**
*
* */
private int height;
/**
*
* */
private float weight;
/**
*
* */
private int rightborder;
/**
*
* */
private int bei;
/**
*
* */
private int stringsize;
[email protected]의 도구 클래스,shp 파일 읽 기:
package com.gwhn.geotools;
import org.geotools.data.FeatureWriter;
import org.geotools.data.FileDataStoreFactorySpi;
import org.geotools.data.Transaction;
import org.geotools.data.shapefile.ShapefileDataStore;
import org.geotools.data.shapefile.ShapefileDataStoreFactory;
import org.geotools.data.simple.SimpleFeatureIterator;
import org.geotools.data.simple.SimpleFeatureSource;
import org.geotools.feature.FeatureCollection;
import org.geotools.feature.simple.SimpleFeatureTypeBuilder;
import org.geotools.referencing.crs.DefaultGeographicCRS;
import org.junit.Test;
import org.locationtech.jts.geom.*;
import org.opengis.feature.Property;
import org.opengis.feature.simple.SimpleFeature;
import org.opengis.feature.simple.SimpleFeatureType;
import java.io.File;
import java.io.Serializable;
import java.nio.charset.Charset;
import java.util.*;
public class ShapeUtil {
// shp 【 + 】
public List<Property> SHPRead(String path) throws Exception {
List<Property> propertyList = new ArrayList<>();
// shapfile ,
// shapefile
ShapefileDataStoreFactory dataStoreFactory = new ShapefileDataStoreFactory();
//
File file = new File(path);
// shapfile
//ShapefileDataStore: , Shapefiles
ShapefileDataStore ds = (ShapefileDataStore) dataStoreFactory.createDataStore(file.toURI().toURL());
// ,
ds.setCharset(Charset.forName("UTF-8"));
//getFeatureSource():ContentFeatureSource
// FeatureCollection 。 :
//SimpleFeatureSource FeatureCollection【 】,
SimpleFeatureSource featureSource = ds.getFeatureSource();
//getFeatures(): FeatureCollection 。
// FeatureCollection 。 FeatureCollection
FeatureCollection<SimpleFeatureType, SimpleFeature> result = featureSource.getFeatures();
System.out.println(" :" + result.size());
//features(): FeatureIterator
SimpleFeatureIterator it = (SimpleFeatureIterator) result.features();
while (it.hasNext()) {
SimpleFeature feature = it.next();
// 【 , 】
Iterator<Property> ip = feature.getProperties().iterator();
// System.out.println("========================");
// while
while (ip.hasNext()) {
Property pro = ip.next();
// System.out.println(pro.getName()+" = "+pro.getValue());
propertyList.add(pro);
}//end
}
it.close();
return propertyList;
}
}
[email protected] 에서 가 져 온 문자열 을 다 중 다각형 대상 MultiPolygon 으로 변환 하 는 도구 클래스 입 니 다.
package com.gwhn.geotools;
import org.locationtech.jts.geom.*;
import org.locationtech.jts.io.ParseException;
import org.locationtech.jts.io.WKTReader;
import java.util.List;
/**
*
*
* @author [email protected]
* @version V1.0.1
* @blob http://blog.csdn.net/appleyk
* @date 2017 12 8 10:38:49
*/
//
public class GeometryCreator {
public static GeometryCreator geometryCreator = null;
private GeometryFactory geometryFactory = new GeometryFactory();
public GeometryCreator() {
}
/**
*
*
* @return
*/
public static GeometryCreator getInstance() {
if (geometryCreator == null) {
return new GeometryCreator();
}
return geometryCreator;
}
/**
* 1.
*/
/**
* 1.1 X,Y : 【Point】
*
* @param x
* @param y
* @return
*/
public Point createPoint(double x, double y) {
Coordinate coord = new Coordinate(x, y);
Point point = geometryFactory.createPoint(coord);
return point;
}
/**
* 1.2 WKT 【String】 : 【Point】
*
* @return
* @throws ParseException
*/
public Point createPointByWKT(String PointWKT) throws ParseException {
WKTReader reader = new WKTReader(geometryFactory);
Point point = (Point) reader.read(PointWKT);
return point;
}
/**
* 1.3 WKT 【String】 : 【MultiPoint】
*
* @return
* @throws ParseException
*/
public MultiPoint createMulPointByWKT(String MPointWKT) throws ParseException {
WKTReader reader = new WKTReader(geometryFactory);
MultiPoint mpoint = (MultiPoint) reader.read(MPointWKT);
return mpoint;
}
/**
* 2.
*/
/**
* 2.1 : 【LineString】
*
* @param ax
* @param ay
* @param bx
* @param by
* @return
*/
public LineString createLine(double ax, double ay, double bx, double by) {
Coordinate[] coords = new Coordinate[]{new Coordinate(ax, ay), new Coordinate(bx, by)};
LineString line = geometryFactory.createLineString(coords);
return line;
}
/**
* 2.2 WKT : 【LineString】
*
* @param LineStringWKT
* @return
* @throws ParseException
*/
public LineString createLineByWKT(String LineStringWKT) throws ParseException {
WKTReader reader = new WKTReader(geometryFactory);
LineString line = (LineString) reader.read("LINESTRING(0 0, 2 0)");
return line;
}
/**
* 2.3 , : 【MultiLineString】
*
* @param list
* @return
*/
public MultiLineString createMLine(List<Coordinate[]> list) {
MultiLineString ms = null;
if (list == null) {
return ms;
}
LineString[] lineStrings = new LineString[list.size()];
// Coordinate[] coords1 = new Coordinate[] {new Coordinate(2, 2), new Coordinate(2, 2)};
// LineString line1 = geometryFactory.createLineString(coords1);
//
// Coordinate[] coords2 = new Coordinate[] {new Coordinate(2, 2), new Coordinate(2, 2)};
// LineString line2 = geometryFactory.createLineString(coords2);
int i = 0;
for (Coordinate[] coordinates : list) {
lineStrings[i] = geometryFactory.createLineString(coordinates);
}
ms = geometryFactory.createMultiLineString(lineStrings);
return ms;
}
/**
* 2.4 WKT 【String】 : 【MultiLineString】
*
* @param MLineStringWKT
* @return
* @throws ParseException
*/
public MultiLineString createMLineByWKT(String MLineStringWKT) throws ParseException {
WKTReader reader = new WKTReader(geometryFactory);
MultiLineString line = (MultiLineString) reader.read(MLineStringWKT);
return line;
}
/**
* 3.
*/
/**
* 3.1 WKT 【String】 : 【Polygon】
*
* @param PolygonWKT
* @return
* @throws ParseException
*/
public Polygon createPolygonByWKT(String PolygonWKT) throws ParseException {
WKTReader reader = new WKTReader(geometryFactory);
Polygon polygon = (Polygon) reader.read(PolygonWKT);
return polygon;
}
/**
* 3.2 WKT 【String】 : 【MultiPolygon】
*
* @param MPolygonWKT
* @return
* @throws ParseException
*/
public MultiPolygon createMulPolygonByWKT(String MPolygonWKT) throws ParseException {
WKTReader reader = new WKTReader(geometryFactory);
MultiPolygon mpolygon = (MultiPolygon) reader.read(MPolygonWKT);
return mpolygon;
}
/**
*
*
* @param polygons
* @return
* @throws ParseException
*/
public MultiPolygon createMulPolygonByPolygon(Polygon[] polygons) throws ParseException {
return geometryFactory.createMultiPolygon(polygons);
}
/**
* 4.
*/
/**
* 4.1 , :【GeometryCollection】
*
* @return
* @throws ParseException
*/
public GeometryCollection createGeoCollect(Geometry[] geoArray) throws ParseException {
// LineString line = createLine(125.12,25.4,85.63,99.99);
// Polygon poly = createPolygonByWKT("POLYGON((20 10, 30 0, 40 10, 30 20, 20 10))");
// Geometry g1 = geometryFactory.createGeometry(line);
// Geometry g2 = geometryFactory.createGeometry(poly);
// Geometry[] geoArray = new Geometry[]{g1,g2};
GeometryCollection gc = geometryFactory.createGeometryCollection(geoArray);
return gc;
}
/**
* 5.
*/
/**
* 5.1 : -- 【Polygon】
*
* @param x
* @param y
* @param RADIUS
* @return
*/
public Polygon createCircle(double x, double y, final double RADIUS) {
final int SIDES = 32;//
Coordinate coords[] = new Coordinate[SIDES + 1];
for (int i = 0; i < SIDES; i++) {
double angle = ((double) i / (double) SIDES) * Math.PI * 2.0;
double dx = Math.cos(angle) * RADIUS;
double dy = Math.sin(angle) * RADIUS;
coords[i] = new Coordinate((double) x + dx, (double) y + dy);
}
coords[SIDES] = coords[0];
//
LinearRing ring = geometryFactory.createLinearRing(coords);
Polygon polygon = geometryFactory.createPolygon(ring, null);
return polygon;
}
/**
* 6.
*/
/**
* 6.1 WKT
*
* @param ringWKT
* @return
* @throws ParseException
*/
public LinearRing createLinearRingByWKT(String ringWKT) throws ParseException {
WKTReader reader = new WKTReader(geometryFactory);
LinearRing ring = (LinearRing) reader.read(ringWKT);
return ring;
}
}
xml 는 다음 과 같 습 니 다:
<?xml version="1.0" encoding="UTF-8"?>
<application>
<!-- -->
<module name="Http">
<group name="FileExport">
<configValue key="ShapePath">D:/testspace/spd/rain/</configValue>
<configValue key="ProvinceShapePath">D:/testspace/spd/Provinces_shp/</configValue>
<configValue key="ProvincePath">D:\testspace\spd\output\</configValue>
<configValue key="ExportPath">D:\testspace\spd\Export\</configValue>
<configValue key="PropertyPath">D:\testspace\spd\Export\</configValue>
</group>
</module>
</application>
shp 파일 위치 와 그림 출력 위 치 를 가 져 오기 위해 xml 읽 기:
package com.gwhn.Util;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Text;
import org.dom4j.io.SAXReader;
import java.io.File;
import java.util.Iterator;
/**
* @author banxian
* @date 2021/1/21 15:56
*/
public class YereeXmlContext {
/**
* key, key
* <!-- -->
* <module name="Http">
* <group name="FileUpload">
* <configValue key="TempDir">D:\\temp\\upload\\</configValue>
* </group>
* </module>
*
* @param key1
* @param key2
* @param key3
* @return
* @author banxian
* @date: 2021/1/21 19:51
*/
public String getXmlValue(String key1, String key2, String key3) {
try {
//1. Reader
SAXReader reader = new SAXReader();
//2. xml
String directoryPath = Thread.currentThread().getContextClassLoader().getResource("config.xml").getPath();//
Document document = reader.read(new File(directoryPath));
//3.
Element rootElement = document.getRootElement();
Element moduleElement = getTargetElement(key1, rootElement);
Element groupElement = getTargetElement(key2, moduleElement);
Element configElement = getTargetElement(key3, groupElement);
Attribute attribute = (Attribute) configElement.attributes().get(0);
String key = attribute.getValue();
Text text3 = (Text) configElement.content().get(0);
String value = text3.getText();
return value;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* targetKey
*
* @param targetKey
* @param parentElement
* @return
* @author banxian
* @date: 2021/1/21 19:53
*/
public Element getTargetElement(String targetKey, Element parentElement) {
Iterator iterator = parentElement.elementIterator();
Element childElement = null;
while (iterator.hasNext()) {
Element element = (Element) iterator.next();
Attribute attribute = (Attribute) element.attributes().get(0);
String key = attribute.getValue();
if (key.equals(targetKey) || key == targetKey) {
childElement = element;
break;
}
}
return childElement;
}
}
핵심 클래스:다각형 으로 그림 그리 기
package com.gwhn.Util;
import com.gwhn.entity.CutProperty;
import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.geom.MultiPolygon;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.List;
/**
* @author banxian
* @date 2021/6/28 12:37
*/
public class PolygonUtil {
ImageUtils imageUtils = new ImageUtils();
TxtUtil txtUtil = new TxtUtil();
/**
*
* @param path
* @param cutProperty
* @param multiPolygonList
* @return
* @author banxian
* @date: 2021/6/30 15:31
*/
public void graphicsByMultiPolygon(String path, List<MultiPolygon> multiPolygonList, CutProperty cutProperty) {
try {
int imageWidth = cutProperty.getWidth();//
int imageHeight = cutProperty.getHeight();//
BufferedImage image = new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D graphics = (Graphics2D) image.getGraphics();
graphics.setColor(Color.white);
graphics.fillRect(0, 0, imageWidth, imageHeight);
graphics.setColor(Color.black);
int m = cutProperty.getBei() / 100;
graphics.setStroke(new BasicStroke(cutProperty.getWeight() * m));//
Font font = new Font(" ", Font.BOLD, 1200);
graphics.setFont(font);
graphics.drawString(cutProperty.getProvince(), 12500, 1500);
for (MultiPolygon multiPolygon : multiPolygonList) {
int num = multiPolygon.getNumGeometries();
for (int i = 0; i < num; i++) {
Geometry geometry = multiPolygon.getGeometryN(i);
drawPolygon(geometry, cutProperty, graphics);
}
}
imageUtils.createImage(path, image);
System.out.println(path + ":" + font.getSize());
} catch (
Exception e) {
e.printStackTrace();
}
}
/**
*
* @param geometry
* @param cutProperty
* @param graphics2D
* @return
* @author banxian
* @date: 2021/6/28 12:37
*/
public void drawPolygon(Geometry geometry, CutProperty cutProperty, Graphics2D graphics2D) {
int m = cutProperty.getBei() / 100;
Double xtemp = Double.valueOf(cutProperty.getX() * m);
Double ytemp = Double.valueOf(cutProperty.getY() * m);
//
if (geometry.toString().contains("),")) {
String geoStr = geometry.toString();
String tempStr = geoStr.substring(9, geoStr.length() - 1) + ",";
while (tempStr.contains("),")) {
String temp = tempStr.substring(0, tempStr.indexOf("),") + 2);
tempStr = tempStr.substring(temp.length()).trim();
Polygon polygon = txtUtil.getPolygonByStr(temp,cutProperty);
graphics2D.drawPolygon(polygon);
}
} else {
Coordinate[] coordinates = geometry.getCoordinates();
Polygon polygon = new Polygon();
Double x, y;
for (int j = 0; j < coordinates.length; j++) {
Coordinate coordinate = coordinates[j];
x = coordinate.getX() * cutProperty.getBei() - xtemp;
y = cutProperty.getRightborder() * m - coordinate.getY() * cutProperty.getBei() - ytemp;
polygon.addPoint(x.intValue(), y.intValue());
}
graphics2D.drawPolygon(polygon);
}
}
}
도구 류:특수 한 경 계 를 처리 하고 보통 비행 지,섬 으로 구성 된다.
package com.gwhn.Util;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.gwhn.entity.CutProperty;
import java.awt.*;
import java.io.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author banxian
* @date 2021/5/10 15:57
*/
public class TxtUtil {
public Polygon getPolygonByStr(String polygonStr,CutProperty cutProperty) {
polygonStr = polygonStr.substring(1, polygonStr.length() - 2) + ",";
List<String> polygonStrList = new ArrayList<>();
while (polygonStr.contains(",")) {
String pointStr = polygonStr.substring(0, polygonStr.indexOf(",")).trim();
polygonStrList.add(pointStr);
polygonStr = polygonStr.substring(polygonStr.indexOf(",") + 1);
}
return transPointStrToPolygon(polygonStrList, cutProperty);
}
public Polygon transPointStrToPolygon(List<String> polygonStrList,CutProperty cutProperty) {
int m = cutProperty.getBei() / 100;
Double xtemp = Double.valueOf(cutProperty.getX() * m);
Double ytemp = Double.valueOf(cutProperty.getY() * m);
Polygon polygon = new Polygon();
for (String pointStr : polygonStrList) {
Double x = Double.parseDouble(pointStr.substring(0, pointStr.indexOf(" ")));
Double y = Double.parseDouble(pointStr.substring(pointStr.indexOf(" ")).trim());
x = x * cutProperty.getBei() - xtemp;
y = cutProperty.getRightborder()*m - y * cutProperty.getBei()-ytemp;
polygon.addPoint(x.intValue(), y.intValue());
}
return polygon;
}
// json
public String readJsonFile(String fileName) {
String jsonStr = "";
try {
File jsonFile = new File(fileName);
FileReader fileReader = new FileReader(jsonFile);
Reader reader = new InputStreamReader(new FileInputStream(jsonFile), "utf-8");
int ch = 0;
StringBuffer sb = new StringBuffer();
while ((ch = reader.read()) != -1) {
sb.append((char) ch);
}
fileReader.close();
reader.close();
jsonStr = sb.toString();
return jsonStr;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
/**
* json
*
* @param
* @return
* @author banxian
* @date: 2021/6/25 8:16
*/
public Map<String, CutProperty> getCutPropertyMap() {
String path = Thread.currentThread().getContextClassLoader().getResource("property.json").getPath();//
String s = readJsonFile(path);
JSONObject jsonObject = JSON.parseObject(s);
JSONArray jsonArray = jsonObject.getJSONArray("properties");// JSONArray
List<CutProperty> cutPropertyList = jsonArray.toJavaList(CutProperty.class);
Map<String, CutProperty> cutPropertyMap = new HashMap();
for (CutProperty cutProperty : cutPropertyList) {
cutPropertyMap.put(cutProperty.getProvince(), cutProperty);
}
return cutPropertyMap;
}
}
핵심 클래스:읽 은 shp 파일 데이터 에서 문자열 을 추출 하여 다 다각형 으로 변환 하고 그림 을 그립 니 다.
package com.gwhn.controller;
import com.gwhn.Util.PolygonUtil;
import com.gwhn.Util.TxtUtil;
import com.gwhn.Util.YereeXmlContext;
import com.gwhn.entity.CutProperty;
import com.gwhn.geotools.GeometryCreator;
import com.gwhn.geotools.ShapeUtil;
import org.locationtech.jts.geom.MultiPolygon;
import org.opengis.feature.Property;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* @author banxian
* @date 2021/6/1 8:12
*/
public class ShpPictureController {
PolygonUtil polygonUtil = new PolygonUtil();
TxtUtil txtUtil = new TxtUtil();
Map<String, CutProperty> cutPropertyMap = txtUtil.getCutPropertyMap();
/**
* shp
* @param
* @return
* @author banxian
* @date: 2021/6/28 12:35
*/
public void doNation() {
YereeXmlContext yereeXmlContext = new YereeXmlContext();
GeometryCreator geometryCreator = new GeometryCreator();
String shapePath = yereeXmlContext.getXmlValue("Http", "FileExport", "ProvincePath") + "province.shp";
ShapeUtil shapeUtil = new ShapeUtil();
try {
List<Property> propertyList = shapeUtil.SHPRead(shapePath);
List<MultiPolygon> multiPolygonList = new ArrayList<>();
for (int i = 0; i * 8 < propertyList.size(); i++) {
Property property = propertyList.get(i * 8);
String valueStr = property.getValue().toString();
MultiPolygon multiPolygon = geometryCreator.createMulPolygonByWKT(valueStr);
multiPolygonList.add(multiPolygon);
}
String path = yereeXmlContext.getXmlValue("Http", "FileExport", "ExportPath");
File newFileDir = new File(path);
//
if (!newFileDir.exists()) {
newFileDir.mkdirs();
}
// String picturName = imageUtils.genImageName() + ".jpg";
String picturName = " .jpg";
CutProperty cutProperty = cutPropertyMap.get(" ");
polygonUtil.graphicsByMultiPolygon(path + picturName, multiPolygonList, cutProperty);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(" ");
}
/**
* shp
* @param
* @return
* @author banxian
* @date: 2021/6/28 12:35
*/
public void doProvince() {
YereeXmlContext yereeXmlContext = new YereeXmlContext();
GeometryCreator geometryCreator = new GeometryCreator();
ShapeUtil shapeUtil = new ShapeUtil();
String shapeDirPath = yereeXmlContext.getXmlValue("Http", "FileExport", "ProvinceShapePath");
List<File> fileList = new ArrayList<>();
fileList = getFileList(shapeDirPath, fileList);
for (int j = 0; j < fileList.size(); j++) {
File file = fileList.get(j);
if (file.getName().contains(".shp")) {
File parentFile = file.getParentFile();
String province = parentFile.getName();
System.out.println(province);
int size = 7;
if (province.equals(" ") || province == " " || province.equals(" ") || province == " ") {
size = 10;
}
CutProperty cutProperty = cutPropertyMap.get(province);
try {
List<Property> propertyList = shapeUtil.SHPRead(file.getPath());
List<MultiPolygon> multiPolygonList = new ArrayList<>();
for (int i = 0; i * size < propertyList.size(); i++) {
String valueStr = propertyList.get(i * size).getValue().toString();
MultiPolygon multiPolygon = geometryCreator.createMulPolygonByWKT(valueStr);
multiPolygonList.add(multiPolygon);
}
String path = yereeXmlContext.getXmlValue("Http", "FileExport", "ExportPath");
;
File newFileDir = new File(path);
//
if (!newFileDir.exists()) {
newFileDir.mkdirs();
}
String picturName = province + ".jpg";
polygonUtil.graphicsByMultiPolygon(path + picturName, multiPolygonList, cutProperty);
} catch (Exception e) {
e.printStackTrace();
}
}
}
System.out.println(" ");
}
/**
* shp
* @param dirPath
* @param fileList
* @return
* @author banxian
* @date: 2021/6/28 12:36
*/
public List<File> getFileList(String dirPath, List<File> fileList) {
File dir = new File(dirPath);
if (!dir.exists()) {
dir.mkdirs();
}
for (File file : dir.listFiles()) {
if (!file.isDirectory()) {
fileList.add(file);
} else {
getFileList(file.getPath(), fileList);
}
}
return fileList;
}
}
지도 좌표 캡 처 매개 변수
{
"properties": [
{
"province": " ",
"x": 8000,
"y": 18600,
"width": 25000,
"height": 15000,
"weight": 5.0,
"bei":350,
"rightborder": 25000,
"stringsize": 500
},
{
"province": " ",
"x": 12050,
"y": 21800,
"width": 23000,
"height": 16000,
"weight": 0.8,
"bei": 10000,
"rightborder": 25000,
"stringsize": 500
},
{
"province": " ",
"x": 9700,
"y": 22000,
"width": 25000,
"height": 25000,
"weight": 2.0,
"bei": 2500,
"rightborder": 25000,
"stringsize": 50
},
{
"province": " ",
"x": 9000,
"y": 19000,
"width": 25000,
"height": 15000,
"weight": 3.0,
"bei": 600,
"rightborder": 25000,
"stringsize": 180
},
{
"province": " ",
"x": 11515,
"y": 20830,
"width": 25000,
"height": 25000,
"weight": 1.0,
"bei": 10000,
"rightborder": 25000,
"stringsize": 600
},
{
"province": " ",
"x": 12100,
"y": 20200,
"width": 25000,
"height": 17000,
"weight": 2.0,
"bei": 2100,
"rightborder": 25000,
"stringsize": 40
},
{
"province": " ",
"x": 9600,
"y": 21500,
"width": 25000,
"height": 20000,
"weight": 2.0,
"bei": 1900,
"rightborder": 25000,
"stringsize": 40
},
{
"province": " ",
"x": 11600,
"y": 20920,
"width": 25000,
"height": 25000,
"weight": 1.0,
"bei": 10000,
"rightborder": 25000,
"stringsize": 600
},
{
"province": " ",
"x": 10400,
"y": 20960,
"width": 20000,
"height": 25000,
"weight": 1.0,
"bei": 4210,
"rightborder": 25000,
"stringsize": 40
},
{
"province": " ",
"x": 11350,
"y": 21500,
"width": 25000,
"height": 22000,
"weight": 1.0,
"bei": 3300,
"rightborder": 25000,
"stringsize": 25
},
{
"province": " ",
"x": 11430,
"y": 21050,
"width": 25000,
"height": 20000,
"weight": 1.0,
"bei": 2900,
"rightborder": 25000,
"stringsize": 35
},
{
"province": " ",
"x": 10900,
"y": 20850,
"width": 25000,
"height": 25000,
"weight": 1.0,
"bei": 3500,
"rightborder": 25000,
"stringsize": 25
},
{
"province": " ",
"x": 10750,
"y": 22400,
"width": 25000,
"height": 15000,
"weight": 1.0,
"bei": 2200,
"rightborder": 25000,
"stringsize": 40
},
{
"province": " ",
"x": 10400,
"y": 22200,
"width": 25000,
"height": 18000,
"weight": 1.0,
"bei": 2600,
"rightborder": 25000,
"stringsize": 35
},
{
"province": " ",
"x": 7200,
"y": 19800,
"width": 25000,
"height": 20000,
"weight": 2.0,
"bei": 900,
"rightborder": 25000,
"stringsize": 150
},
{
"province": " ",
"x": 11550,
"y": 21400,
"width": 25000,
"height": 25000,
"weight": 1.0,
"bei": 4000,
"rightborder": 25000,
"stringsize": 25
},
{
"province": " ",
"x": 11250,
"y": 21950,
"width": 25000,
"height": 25000,
"weight": 1.0,
"bei": 4000,
"rightborder": 25000,
"stringsize": 25
},
{
"province": " ",
"x": 11250,
"y": 20600,
"width": 25000,
"height": 25000,
"weight": 1.0,
"bei": 3000,
"rightborder": 25000,
"stringsize": 40
},
{
"province": " ",
"x": 10900,
"y": 21200,
"width": 25000,
"height": 23000,
"weight": 1.0,
"bei": 2700,
"rightborder": 25000,
"stringsize": 25
},
{
"province": " ",
"x": 11800,
"y": 21800,
"width": 25000,
"height": 25000,
"weight": 1.0,
"bei": 5000,
"rightborder": 25000,
"stringsize": 25
},
{
"province": " ",
"x": 10800,
"y": 21500,
"width": 25000,
"height": 20000,
"weight": 1.0,
"bei": 3000,
"rightborder": 25000,
"stringsize": 30
},
{
"province": " ",
"x": 10800,
"y": 21900,
"width": 25000,
"height": 25000,
"weight": 1.0,
"bei": 3500,
"rightborder": 25000,
"stringsize": 25
},
{
"province": " ",
"x": 9000,
"y": 20300,
"width": 25000,
"height": 25000,
"weight": 2.0,
"bei": 1200,
"rightborder": 25000,
"stringsize": 70
},
{
"province": " ",
"x": 11550,
"y": 22050,
"width": 25000,
"height": 25000,
"weight": 1.0,
"bei": 4000,
"rightborder": 25000,
"stringsize": 25
},
{
"province": " ",
"x": 7500,
"y": 21000,
"width": 25000,
"height": 15000,
"weight": 1.5,
"bei": 1000,
"rightborder": 25000,
"stringsize": 100
},
{
"province": " ",
"x": 10350,
"y": 21900,
"width": 25000,
"height": 25000,
"weight": 1.0,
"bei": 3200,
"rightborder": 25000,
"stringsize": 35
},
{
"province": " ",
"x": 11850,
"y": 20500,
"width": 25000,
"height": 25000,
"weight": 1.0,
"bei": 3300,
"rightborder": 25000,
"stringsize": 25
},
{
"province": " ",
"x": 10500,
"y": 21700,
"width": 25000,
"height": 25000,
"weight": 1.0,
"bei": 4700,
"rightborder": 25000,
"stringsize": 20
},
{
"province": " ",
"x": 10450,
"y": 21000,
"width": 25000,
"height": 25000,
"weight": 1.0,
"bei": 2900,
"rightborder": 25000,
"stringsize": 25
},
{
"province": " ",
"x": 8700,
"y": 20900,
"width": 25000,
"height": 15000,
"weight": 2.0,
"bei": 1500,
"rightborder": 25000,
"stringsize": 70
},
{
"province": " ",
"x": 12000,
"y": 19500,
"width": 25000,
"height": 18000,
"weight": 1.0,
"bei": 1500,
"rightborder": 25000,
"stringsize": 60
}
]
}
테스트 클래스
public static void main(String[] args) {
try {
ShpPictureController shpPictureController = new ShpPictureController();
// shpPictureController.doProvince();
shpPictureController.doNation();
} catch (Exception e) {
e.printStackTrace();
}
}
마지막 으로 그린 그림 의 효 과 는 다음 과 같다.자바 가 GeoTools 를 사용 하여 shp 파일 을 읽 고 그림 을 그 리 는 조작 코드 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 자바 가 shp 파일 을 읽 고 그림 을 그 리 는 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 지원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.