boku-ilen / geodot-plugin Goto Github PK
View Code? Open in Web Editor NEWGodot plugin for loading geospatial data
License: GNU General Public License v3.0
Godot plugin for loading geospatial data
License: GNU General Public License v3.0
I try with godot 3.1 stable ans 3.2 stable and I have these errors :
Godot Engine v3.1.2.stable.official - https://godotengine.org
OpenGL ES 3.0 Renderer: Mesa DRI Intel(R) UHD Graphics 630 (Coffeelake 3x8 GT2)
ERROR: set_locale: Unsupported locale 'C', falling back to 'en'.
At: core/translation.cpp:958.
ERROR: open_dynamic_library: Can't open dynamic library: /media/hacker/data/GODOT/PROJETS/geodot-3.2/demo/addons/geodot/x11/libgeodot.so. Error: /media/hacker/data/GODOT/VERSIONS/31/../lib/libgeodot.so: cannot open shared object file: No such file or directory
At: drivers/unix/os_unix.cpp:428.
ERROR: get_symbol: No valid library handle, can't get symbol from GDNative object
At: modules/gdnative/gdnative.cpp:488.
ERROR: init_library: No nativescript_init in "res://addons/geodot/x11/libgeodot.so" found
At: modules/gdnative/nativescript/nativescript.cpp:1504.
ERROR: start: Script does not inherit a Node: res://addons/geodot/geodot.gdns
At: main/main.cpp:1557.
grep --recursive --after=2 __unix__ .
Currently the RasterTileExtractor library has to be moved to /usr/lib
, which isn't very portable and practical. Also, GDAL has to be installed.
We need to find a method which is completely portable. Ideally, everything would be in the bin
folder of the GDNative plugin.
GDALRasterIO takes image size and offset. It doesn't offer things like different types of interpolation, but in situations where this isn't required, we may be able to translate geocoordinates into pixel coordinates and use those in GDALRasterIO, skipping all the GDALWarp.
This is especially relevant for very large (e.g. 10x10 km) tiles which don't require any interpolation, but should be as fast as possible.
diff src/vector-extractor/SConstruct src/raster-tile-extractor/SConstruct
This was introduced in SCons 4.0.0
https://scons.org/doc/production/HTML/scons-man.html#b-CompilationDatabase
scons target=release osgeo_path=/usr/local/Cellar/gdal/3.2.1
find demo/addons/geodot/osx/
demo/addons/geodot/osx/
demo/addons/geodot/osx//libRasterTileExtractor.a <==================
demo/addons/geodot/osx//libgeodot.dylib
demo/addons/geodot/osx//libVectorExtractor.a <===============
This is caused by 538e2b3 somehow.
It is a little weird as libgeodot.dylib is created OK
To make it easier for newcomers to get started with an example project, we want to bundle some test data with the projects -- that way, they should work out of the box.
The sections will have to be very small to avoid a big download size. I think a 500x500m square from Vienna data would work well. That data is licensed CC-BY 4.0.
I am trying to build this on an Ubuntu 20.04 system following the instructions.
git clone https://github.com/boku-ilen/geodot-plugin.git
cd geodot-plugin/
git submodule update --init --recursive
Submodule 'godot-cpp' (https://github.com/GodotNativeTools/godot-cpp) registered for path 'godot-cpp'
Cloning into '/home/julian/extrepositories/geodot-plugin/godot-cpp'...
Submodule path 'godot-cpp': checked out 'c9a740be34438ce999402b7b76304a38daaaa811'
Submodule 'godot_headers' (https://github.com/GodotNativeTools/godot_headers) registered for path 'godot-cpp/godot_headers'
Cloning into '/home/julian/extrepositories/geodot-plugin/godot-cpp/godot_headers'...
Submodule path 'godot-cpp/godot_headers': checked out 'ddf67cc7b8274c5fb77a71c828bab2991f1ee12a'
scons platform=linux generate_bindings=yes
cons: Reading SConscript files ...
note: scons_compiledb could not be imported. To be able to use the `--compiledb=` flag, please run `pip3 install scons-compiledb`.
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
g++ -o GeoRaster.os -c -std=c++17 -fPIC -I. -I/home/julian/extrepositories/geodot-plugin/src/global GeoRaster.cpp
g++ -o RasterTileExtractor.os -c -std=c++17 -fPIC -I. -I/home/julian/extrepositories/geodot-plugin/src/global RasterTileExtractor.cpp
g++ -o build/libRasterTileExtractor.so -shared GeoRaster.os RasterTileExtractor.os -lgdal
scons: done building targets.
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
g++ -o Feature.os -c -std=c++17 -fPIC -I. -I/home/julian/extrepositories/geodot-plugin/src/global Feature.cpp
g++ -o LineFeature.os -c -std=c++17 -fPIC -I. -I/home/julian/extrepositories/geodot-plugin/src/global LineFeature.cpp
g++ -o PointFeature.os -c -std=c++17 -fPIC -I. -I/home/julian/extrepositories/geodot-plugin/src/global PointFeature.cpp
g++ -o PolygonFeature.os -c -std=c++17 -fPIC -I. -I/home/julian/extrepositories/geodot-plugin/src/global PolygonFeature.cpp
g++ -o VectorExtractor.os -c -std=c++17 -fPIC -I. -I/home/julian/extrepositories/geodot-plugin/src/global VectorExtractor.cpp
VectorExtractor.cpp: In static member function 'static std::__cxx11::list<LineFeature*> VectorExtractor::crop_lines_to_square(const char*, double, double, double, int)':
VectorExtractor.cpp:205:32: warning: ignoring return value of 'OGRErr OGRLayer::CreateFeature(OGRFeature*)', declared with attribute warn_unused_result [-Wunused-result]
205 | square_layer->CreateFeature(square_feature);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~
g++ -o build/libVectorExtractor.so -shared Feature.os LineFeature.os PointFeature.os PolygonFeature.os VectorExtractor.os -lgdal
scons: done building targets.
scons: done reading SConscript files.
scons: Building targets ...
g++ -o src/gdlibrary.os -c -std=c++17 -fPIC -g3 -Og -fPIC -I. -Igodot-cpp/godot_headers -Igodot-cpp/include -Igodot-cpp/include/core -Igodot-cpp/include/gen -Isrc/raster-tile-extractor -Isrc/vector-extractor -Isrc -Isrc/global src/gdlibrary.cpp
In file included from godot-cpp/include/core/Godot.hpp:12,
from src/geodot.h:5,
from src/gdlibrary.cpp:1:
godot-cpp/include/core/Ref.hpp:5:10: fatal error: Reference.hpp: No such file or directory
5 | #include "Reference.hpp"
| ^~~~~~~~~~~~~~~
compilation terminated.
scons: *** [src/gdlibrary.os] Error 1
scons: building terminated because of errors.
Currently, images are always sampled with the nearest-neighbor method. This results in 256x256 images with huge pixels at small scales. In most cases, this is not what we want.
We should introduce a flag with which the upsampling behavior can be set. Possibilities are:
It seems like some GDAL calls are not thread safe at the moment. This should be evaluated and fixed if possible!
On Linux, we just copied over the libgdal.so
into demo/addons/geodot/x11/
(as described in the README). On Windows, we can probably do something similar, but we need to figure out which DLLs are needed. Also we should document any other dependencies.
Same for OSX - as described by @clemens-tolboom, we might be able to use a copy of /usr/local/Cellar/gdal/3.2.1/lib/libgdal.dylib
.
Required for #36.
At the moment, vector data has to be in webmercator for consistent coordinates. It would be ideal to convert coordinates on-the-fly (assuming the position passed to the function is always in webmercator meters) so that we're independent of the original projection of the data.
We would need to set the coordinate system / projection of the circle we construct for intersection, and to read and set it on the dataset at the given path in the VectorExtractor.
With nearest neighbor sampling, the scale of the desired image / the resolution (pixels / meter) of the raw geodata should have close to no effect on performance because only single points are sampled either way. Only the resolution of the output texture should have an effect.
For some reason though, the resolution / scale does have a pretty significant impact that is especially noticeable with very high-resolution images and large-scale (overview) extraction. It seems to stem from the warp operation. We should investigate whether additional samples or a different algorithm is used somewhere there. Perhaps #4 could come into play here too!
Instead of long function calls with paths and layer names, we'd like to switch to a more object-oriented solution: Getting a GeoDataset object from Geodot, which offers functions to get its GeoLayers (e.g. all as an Array or individual ones by name). All functionality like getting points near a position, or getting all features, will then be in this GeoLayer class. We may have to strictly differentiate between raster layers and vector layers since those offer very different functionality (-> GeoRasterLayer and GeoVectorLayer).
This has several advantages: Errors are easier to convey precisely (with is_valid()
checks in each object), function calls are less convoluted, and the user has a much finer control of caching since it is in their control when a GeoDataset or GeoLayer object is deleted.
This will, of course, break compatibility with previous versions.
The RasterTileExtractor offers a function to reproject any raster data into webmercator and save it on the disk, but it is not yet exposed to Godot. Now that RasterTileExtractor::clip
does no on-the-fly reprojection for performance reasons, it would make sense to have access to reproject_to_webmercator
. Thus, it can be used for an on-demand preprocessing step to get everything into the same projection.
Commit a47587e broke the build.
scons
scons: Reading SConscript files ...
SConsEnvironmentError: No module named compilation_db:
File "/Users/clemens/Downloads/godot/geodot-plugin/SConstruct", line 9:
env = DefaultEnvironment(tools=['default', 'compilation_db'])
Changing back to the old fixes this for now.
#env = DefaultEnvironment(tools=['default', 'compilation_db'])
env = DefaultEnvironment()
Guess we need this requiments somehow documented
Currently, all default GDAL resampling methods are exposed. This is good for most data, but we'd want to smooth out edges in discrete raster data such as land-use. This is currently not possible.
I believe the modal methods could work, or cubic spline with a limited color set (exactly like the image posted in the edit here: https://gis.stackexchange.com/questions/30627/smoothing-reinterpolating-raster-with-gdal/), but we need finer control over the kernel size and color sets to do this.
we will need this to get the configuration and any complete dataset (eg. POIs)
Sometimes it would be convenient to chain Geodot calls like this:
var layer = Geodot.get_dataset(path).get_layer(name)
But this produces an error: The resulting layer does not point to a valid OGRLayer, so the program crashes. A workaround is to do this:
var dataset = Geodot.get_dataset(path)
var layer = dataset.get_layer(name)
It seems like when chaining, some destructor is called too early. I assume the dataset gets deleted, so the layer doesn't point to anything valid anymore.
Not sure worth to report so feel free to close but the MacOS version has better precision.
g++ -o RasterTileExtractor.o -c -std=c++17 -fPIC -I/usr/local/Cellar/gdal/3.2.1/include -I. -I/Users/clemens/Downloads/godot/geodot-plugin/src/global RasterTileExtractor.cpp
RasterTileExtractor.cpp:15:9: warning: 'M_E' macro redefined [-Wmacro-redefined]
#define M_E 2.718281828459045
^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/math.h:689:9: note: previous definition is here
#define M_E 2.71828182845904523536028747135266250 /* e */
^
1 warning generated.
After #33 lands we still face:
The MacOS build process results in the supporting files into res://build/
directory.
Fiddling removing /build
makes them required in res://
aka the root of the demo project. Which is worse.
diff --git a/SConstruct b/SConstruct
index 1eeae22..9f7172a 100644
--- a/SConstruct
+++ b/SConstruct
@@ -18,11 +18,11 @@ cpp_bindings_path = "godot-cpp/"
cpp_library = "libgodot-cpp"
rte_cpp_path = "src/raster-tile-extractor/"
-rte_libpath = "src/raster-tile-extractor/build/"
+rte_libpath = "src/raster-tile-extractor/"
rte_library = "libRasterTileExtractor"
vector_cpp_path = "src/vector-extractor/"
-vector_libpath = "src/vector-extractor/build/"
+vector_libpath = "src/vector-extractor/"
vector_library = "libVectorExtractor"
demo_path = "demo/addons/geodot/"
and the other(s) too
diff --git a/src/vector-extractor/SConstruct b/src/vector-extractor/SConstruct
index bda7203..fa67298 100644
--- a/src/vector-extractor/SConstruct
+++ b/src/vector-extractor/SConstruct
@@ -25,9 +25,9 @@ if env['p'] != '':
-env['target_path'] = 'build/'
+env['target_path'] = './'
env['target_name'] = 'libVectorExtractor'
We do not understand this dynamics on MacOS. Help needed.
There are three places where I think caching could be appropriate:
Geodot.get_image
. It's plausible that these functions are called with the same arguments multiple times (e.g. to load the same heightmap for the terrain and for the collider in two different places) and this would greatly reduce the cost of consecutive calls.GeoImage.get_image_texture
or GeoLine.get_curve3d
. These tend to do quite a lot of work for converting the raw C++ data to a Godot class.In some cases, we'd have to decide whether we want to return exactly the same object or a copy of the previously computed object.
The Float32 type for Geotiffs is currently hardcoded in the RasterTileExtractor, and Geodot::clip always encodes floats into a PoolByteArray.
We want to support other data types as well; at least RGBA (as a general purpose type) and single-band byte (for things like land-use images).
For us, this is relevant for land-use data, to check whether a certain area contains a certain vegetation type, or to get a list of the most common vegetation types in that area.
We will have to make a tradeoff between accuracy and performance. I don't think iterating over all pixels is necessary for most applications, we can just take a few samples. But both options should probably be provided.
GDAL offers some of this (https://gdal.org/api/gdalrasterband_cpp.html#classGDALRasterBand), this might be worth looking into since it's probably well optimized (but probably also overkill).
I am trying to build the plugin on Arch Linux, I get the following include errors :
$ scons platform=linux
scons: Reading SConscript files ...
Compilation Database creation is not supported. Please consider upgrading to SCons 4.x.x!
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
g++ -o GeoRaster.o -c -std=c++17 -fPIC -I. -I/home/vrichard/Projects/godot/geodot-plugin/src/global GeoRaster.cpp
GeoRaster.cpp:11:10: fatal error: gdal/cpl_error.h: No such file or directory
11 | #include <gdal/cpl_error.h>
| ^~~~~~~~~~~~~~~~~~
compilation terminated.
scons: *** [GeoRaster.o] Error 1
scons: building terminated because of errors.
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
g++ -o Feature.o -c -std=c++17 -fPIC -I. -I/home/vrichard/Projects/godot/geodot-plugin/src/global Feature.cpp
Feature.cpp:8:10: fatal error: gdal/ogr_feature.h: No such file or directory
8 | #include <gdal/ogr_feature.h>
| ^~~~~~~~~~~~~~~~~~~~
compilation terminated.
scons: *** [Feature.o] Error 1
scons: building terminated because of errors.
scons: done reading SConscript files.
scons: Building targets ...
g++ -o src/gdlibrary.os -c -std=c++17 -fPIC -g3 -Og -fPIC -I. -Igodot-cpp/godot_headers -Igodot-cpp/include -Igodot-cpp/include/core -Igodot-cpp/include/gen -Isrc/raster-tile-extractor -Isrc/vector-extractor -Isrc -Isrc/global src/gdlibrary.cpp
In file included from src/geodot.h:10,
from src/gdlibrary.cpp:1:
src/vector-extractor/VectorExtractor.h:16:10: fatal error: gdal/cpl_port.h: No such file or directory
16 | #include <gdal/cpl_port.h>
| ^~~~~~~~~~~~~~~~~
compilation terminated.
scons: *** [src/gdlibrary.os] Error 1
scons: building terminated because of errors.
The files on Arch are provided by the gdal
packages and installed in /usr/include/
(see https://archlinux.pkgs.org/rolling/archlinux-community-x86_64/gdal-3.2.2-1-x86_64.pkg.tar.zst.html)
On other major distributions like Ubuntu or Fedora these files are located in /usr/include/gdal/*
as expected (https://ubuntu.pkgs.org/21.04/ubuntu-universe-amd64/libgdal-dev_3.2.2+dfsg-1ubuntu1_amd64.deb.html)
Basically Arch Linux follows the same hierarchy than Windows and OSX, and other Linux distros chose a different path =/
Easily fixed with:
$ grep -rnI "<gdal/" src -l | xargs sed 's/<gdal\//\</g' -i
I'm fine with hacking, but is there any clean way to handle this?
Maybe this helps https://github.com/godotengine/godot-build-scripts ?
Godot CI is using this to test every PR generating builds in https://github.com/godotengine/godot/actions .. ie https://github.com/godotengine/godot/actions/runs/507761636 has build artifacts ... not sure as I haven't tried myself yet.
Instructions are available here: https://docs.godotengine.org/en/latest/community/asset_library/submitting_to_assetlib.html
A .gitattributes
file with export-ignore
attributes like in https://github.com/aaronfranke/godot-measuring-tape/blob/master/.gitattributes should be added to ignore all the source files, as they are not relevant for using the pre-built addon.
We'll probably want to restructure the demo Godot project folders so that they are in the root directory. Maybe we should move the SConstruct
script and the godot-cpp
link into the src
folder to keep all building-related stuff in there.
Untested support for this was added in f9cd51e, but we need data to test it.
scons target=debug
should build godot-cpp
similar.
The instructions are not covering switching from debug to release.
Can't we add this to main SConstuct
?
cd godot-cpp/
scons target=release
cd ..
scons target=r osgeo_path=/usr/local/Cellar/gdal/3.2.1
E:\godot_repos\geodot-plugin>scons platform=windows osgeo_path=c:/OSGeo4W64 target=release
scons: Reading SConscript files ...
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
scons: `.' is up to date.
scons: done building targets.
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
scons: `.' is up to date.
scons: done building targets.
scons: done reading SConscript files.
scons: Building targets ...
link /nologo /dll /out:demo\addons\geodot\win64\libgeodot.dll /implib:demo\addons\geodot\win64\libgeodot.lib /LIBPATH:godot-cpp\bin /LIBPATH:src\raster-tile-extractor\build /LIBPATH:src\vector-extractor\build libgodot-cpp.windows.release.64.lib libRasterTileExtractor.lib libVectorExtractor.lib src\gdlibrary.obj src\geodata.obj src\geodot.obj src\geofeatures.obj src\geoimage.obj
正在创建库 demo\addons\geodot\win64\libgeodot.lib 和对象 demo\addons\geodot\win64\libgeodot.exp
geodata.obj : error LNK2019: 无法解析的外部符号 GDALGetDataTypeSizeBytes,函数 "public: __int64 __cdecl GDALRasterBlock::GetBlockSize(void)const " (?GetBlockSize@GDALRasterBlock@@QEBA_JXZ) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 GDALOpenEx,函数 "public: static class GDALDataset * __cdecl GDALDataset::Open(char const *,unsigned int,char const * const *,char const * const *,char const * const *)" (?Open@GDALDataset@@SAPEAV1@PEBDIPEBQEBD11@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 GDALClose,函数 "public: void __cdecl GDALDatasetUniquePtrDeleter::operator()(class GDALDataset *)const " (??RGDALDatasetUniquePtrDeleter@@QEBAXPEAVGDALDataset@@@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 CPLStrdup,函数 "public: class CPLStringList & __cdecl CPLStringList::InsertString(int,char const *)" (?InsertString@CPLStringList@@QEAAAEAV1@HPEBD@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 CSLFindString,函数 "public: int __cdecl CPLStringList::FindString(char const *)const " (?FindString@CPLStringList@@QEBAHPEBD@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 CSLPartialFindString,函数 "public: int __cdecl CPLStringList::PartialFindString(char const *)const " (?PartialFindString@CPLStringList@@QEBAHPEBD@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: class CPLString & __cdecl CPLString::toupper(void)" (?toupper@CPLString@@QEAAAEAV1@XZ),函数 "private: class GDALDriver * __cdecl GDALDriverManager::GetDriverByName_unlocked(char const *)" (?GetDriverByName_unlocked@GDALDriverManager@@AEAAPEAVGDALDriver@@PEBD@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: int __cdecl CPLStringList::Count(void)const " (?Count@CPLStringList@@QEBAHXZ),函数 "public: bool __cdecl CPLStringList::empty(void)const " (?empty@CPLStringList@@QEBA_NXZ) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: class CPLStringList & __cdecl CPLStringList::InsertStringDirectly(int,char *)" (?InsertStringDirectly@CPLStringList@@QEAAAEAV1@HPEAD@Z),函数 "public: class CPLStringList & __cdecl CPLStringList::InsertString(int,char const *)" (?InsertString@CPLStringList@@QEAAAEAV1@HPEBD@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: char const * __cdecl CPLStringList::FetchNameValue(char const *)const " (?FetchNameValue@CPLStringList@@QEBAPEBDPEBD@Z),函数 "public: char const * __cdecl CPLStringList::operator[](char const *)const " (??ACPLStringList@@QEBAPEBDPEBD@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: class CPLStringList & __cdecl CPLStringList::Assign(char * *,int)" (?Assign@CPLStringList@@QEAAAEAV1@PEAPEADH@Z),函数 "public: class CPLStringList & __cdecl CPLStringList::operator=(char * *)" (??4CPLStringList@@QEAAAEAV0@PEAPEAD@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: char * __cdecl CPLStringList::operator[](int)" (??ACPLStringList@@QEAAPEADH@Z),函数 "public: char * __cdecl CPLStringList::operator[](unsigned __int64)" (??ACPLStringList@@QEAAPEAD_K@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: char const * __cdecl CPLStringList::operator[](int)const " (??ACPLStringList@@QEBAPEBDH@Z),函数 "public: char const * __cdecl CPLStringList::operator[](unsigned __int64)const " (??ACPLStringList@@QEBAPEBD_K@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 CPLAtomicAdd,函数 "public: int __cdecl GDALRasterBlock::AddLock(void)" (?AddLock@GDALRasterBlock@@QEAAHXZ) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: __cdecl OGRStyleMgr::OGRStyleMgr(class OGRStyleTable *)" (??0OGRStyleMgr@@QEAA@PEAVOGRStyleTable@@@Z),函数 "public: void __cdecl OGRStyleMgr::`default constructor closure'(void)" (??_FOGRStyleMgr@@QEAAXXZ) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: virtual __cdecl OGRStyleTool::~OGRStyleTool(void)" (??1OGRStyleTool@@UEAA@XZ),函数 "public: virtual void * __cdecl OGRStyleTool::`vector deleting destructor'(unsigned int)" (??_EOGRStyleTool@@UEAAPEAXI@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: char const * __cdecl OGRStylePen::GetParamStr(enum ogr_style_tool_param_pen_id,int &)" (?GetParamStr@OGRStylePen@@QEAAPEBDW4ogr_style_tool_param_pen_id@@AEAH@Z),函数 "public: char const * __cdecl OGRStylePen::Cap(int &)" (?Cap@OGRStylePen@@QEAAPEBDAEAH@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: int __cdecl OGRStylePen::GetParamNum(enum ogr_style_tool_param_pen_id,int &)" (?GetParamNum@OGRStylePen@@QEAAHW4ogr_style_tool_param_pen_id@@AEAH@Z),函数 "public: int __cdecl OGRStylePen::Priority(int &)" (?Priority@OGRStylePen@@QEAAHAEAH@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: double __cdecl OGRStylePen::GetParamDbl(enum ogr_style_tool_param_pen_id,int &)" (?GetParamDbl@OGRStylePen@@QEAANW4ogr_style_tool_param_pen_id@@AEAH@Z),函数 "public: double __cdecl OGRStylePen::PerpendicularOffset(int &)" (?PerpendicularOffset@OGRStylePen@@QEAANAEAH@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: void __cdecl OGRStylePen::SetParamStr(enum ogr_style_tool_param_pen_id,char const *)" (?SetParamStr@OGRStylePen@@QEAAXW4ogr_style_tool_param_pen_id@@PEBD@Z),函数 "public: void __cdecl OGRStylePen::SetCap(char const *)" (?SetCap@OGRStylePen@@QEAAXPEBD@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: void __cdecl OGRStylePen::SetParamNum(enum ogr_style_tool_param_pen_id,int)" (?SetParamNum@OGRStylePen@@QEAAXW4ogr_style_tool_param_pen_id@@H@Z),函数 "public: void __cdecl OGRStylePen::SetPriority(int)" (?SetPriority@OGRStylePen@@QEAAXH@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: void __cdecl OGRStylePen::SetParamDbl(enum ogr_style_tool_param_pen_id,double)" (?SetParamDbl@OGRStylePen@@QEAAXW4ogr_style_tool_param_pen_id@@N@Z),函数 "public: void __cdecl OGRStylePen::SetPerpendicularOffset(double)" (?SetPerpendicularOffset@OGRStylePen@@QEAAXN@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: char const * __cdecl OGRStyleBrush::GetParamStr(enum ogr_style_tool_param_brush_id,int &)" (?GetParamStr@OGRStyleBrush@@QEAAPEBDW4ogr_style_tool_param_brush_id@@AEAH@Z),函数 "public: char const * __cdecl OGRStyleBrush::BackColor(int &)" (?BackColor@OGRStyleBrush@@QEAAPEBDAEAH@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: int __cdecl OGRStyleBrush::GetParamNum(enum ogr_style_tool_param_brush_id,int &)" (?GetParamNum@OGRStyleBrush@@QEAAHW4ogr_style_tool_param_brush_id@@AEAH@Z),函数 "public: int __cdecl OGRStyleBrush::Priority(int &)" (?Priority@OGRStyleBrush@@QEAAHAEAH@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: double __cdecl OGRStyleBrush::GetParamDbl(enum ogr_style_tool_param_brush_id,int &)" (?GetParamDbl@OGRStyleBrush@@QEAANW4ogr_style_tool_param_brush_id@@AEAH@Z),函数 "public: double __cdecl OGRStyleBrush::Angle(int &)" (?Angle@OGRStyleBrush@@QEAANAEAH@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: void __cdecl OGRStyleBrush::SetParamStr(enum ogr_style_tool_param_brush_id,char const *)" (?SetParamStr@OGRStyleBrush@@QEAAXW4ogr_style_tool_param_brush_id@@PEBD@Z),函数 "public: void __cdecl OGRStyleBrush::SetBackColor(char const *)" (?SetBackColor@OGRStyleBrush@@QEAAXPEBD@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: void __cdecl OGRStyleBrush::SetParamNum(enum ogr_style_tool_param_brush_id,int)" (?SetParamNum@OGRStyleBrush@@QEAAXW4ogr_style_tool_param_brush_id@@H@Z),函数 "public: void __cdecl OGRStyleBrush::SetPriority(int)" (?SetPriority@OGRStyleBrush@@QEAAXH@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: void __cdecl OGRStyleBrush::SetParamDbl(enum ogr_style_tool_param_brush_id,double)" (?SetParamDbl@OGRStyleBrush@@QEAAXW4ogr_style_tool_param_brush_id@@N@Z),函数 "public: void __cdecl OGRStyleBrush::SetAngle(double)" (?SetAngle@OGRStyleBrush@@QEAAXN@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: char const * __cdecl OGRStyleSymbol::GetParamStr(enum ogr_style_tool_param_symbol_id,int &)" (?GetParamStr@OGRStyleSymbol@@QEAAPEBDW4ogr_style_tool_param_symbol_id@@AEAH@Z),函数 "public: char const * __cdecl OGRStyleSymbol::Color(int &)" (?Color@OGRStyleSymbol@@QEAAPEBDAEAH@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: int __cdecl OGRStyleSymbol::GetParamNum(enum ogr_style_tool_param_symbol_id,int &)" (?GetParamNum@OGRStyleSymbol@@QEAAHW4ogr_style_tool_param_symbol_id@@AEAH@Z),函数 "public: int __cdecl OGRStyleSymbol::Priority(int &)" (?Priority@OGRStyleSymbol@@QEAAHAEAH@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: double __cdecl OGRStyleSymbol::GetParamDbl(enum ogr_style_tool_param_symbol_id,int &)" (?GetParamDbl@OGRStyleSymbol@@QEAANW4ogr_style_tool_param_symbol_id@@AEAH@Z),函数 "public: double __cdecl OGRStyleSymbol::Angle(int &)" (?Angle@OGRStyleSymbol@@QEAANAEAH@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: void __cdecl OGRStyleSymbol::SetParamStr(enum ogr_style_tool_param_symbol_id,char const *)" (?SetParamStr@OGRStyleSymbol@@QEAAXW4ogr_style_tool_param_symbol_id@@PEBD@Z),函数 "public: void __cdecl OGRStyleSymbol::SetColor(char const *)" (?SetColor@OGRStyleSymbol@@QEAAXPEBD@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: void __cdecl OGRStyleSymbol::SetParamNum(enum ogr_style_tool_param_symbol_id,int)" (?SetParamNum@OGRStyleSymbol@@QEAAXW4ogr_style_tool_param_symbol_id@@H@Z),函数 "public: void __cdecl OGRStyleSymbol::SetPriority(int)" (?SetPriority@OGRStyleSymbol@@QEAAXH@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: void __cdecl OGRStyleSymbol::SetParamDbl(enum ogr_style_tool_param_symbol_id,double)" (?SetParamDbl@OGRStyleSymbol@@QEAAXW4ogr_style_tool_param_symbol_id@@N@Z),函数 "public: void __cdecl OGRStyleSymbol::SetAngle(double)" (?SetAngle@OGRStyleSymbol@@QEAAXN@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: char const * __cdecl OGRStyleLabel::GetParamStr(enum ogr_style_tool_param_label_id,int &)" (?GetParamStr@OGRStyleLabel@@QEAAPEBDW4ogr_style_tool_param_label_id@@AEAH@Z),函数 "public: char const * __cdecl OGRStyleLabel::BackColor(int &)" (?BackColor@OGRStyleLabel@@QEAAPEBDAEAH@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: int __cdecl OGRStyleLabel::GetParamNum(enum ogr_style_tool_param_label_id,int &)" (?GetParamNum@OGRStyleLabel@@QEAAHW4ogr_style_tool_param_label_id@@AEAH@Z),函数 "public: int __cdecl OGRStyleLabel::Anchor(int &)" (?Anchor@OGRStyleLabel@@QEAAHAEAH@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: double __cdecl OGRStyleLabel::GetParamDbl(enum ogr_style_tool_param_label_id,int &)" (?GetParamDbl@OGRStyleLabel@@QEAANW4ogr_style_tool_param_label_id@@AEAH@Z),函数 "public: double __cdecl OGRStyleLabel::Angle(int &)" (?Angle@OGRStyleLabel@@QEAANAEAH@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: void __cdecl OGRStyleLabel::SetParamStr(enum ogr_style_tool_param_label_id,char const *)" (?SetParamStr@OGRStyleLabel@@QEAAXW4ogr_style_tool_param_label_id@@PEBD@Z),函数 "public: void __cdecl OGRStyleLabel::SetBackColor(char const *)" (?SetBackColor@OGRStyleLabel@@QEAAXPEBD@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: void __cdecl OGRStyleLabel::SetParamNum(enum ogr_style_tool_param_label_id,int)" (?SetParamNum@OGRStyleLabel@@QEAAXW4ogr_style_tool_param_label_id@@H@Z),函数 "public: void __cdecl OGRStyleLabel::SetAnchor(int)" (?SetAnchor@OGRStyleLabel@@QEAAXH@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: void __cdecl OGRStyleLabel::SetParamDbl(enum ogr_style_tool_param_label_id,double)" (?SetParamDbl@OGRStyleLabel@@QEAAXW4ogr_style_tool_param_label_id@@N@Z),函数 "public: void __cdecl OGRStyleLabel::SetAngle(double)" (?SetAngle@OGRStyleLabel@@QEAAXN@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: __cdecl CPLJSONObject::~CPLJSONObject(void)" (??1CPLJSONObject@@QEAA@XZ),函数 "public: __cdecl CPLJSONArray::~CPLJSONArray(void)" (??1CPLJSONArray@@QEAA@XZ) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: __cdecl CPLJSONObject::CPLJSONObject(class CPLJSONObject const &)" (??0CPLJSONObject@@QEAA@AEBV0@@Z),函数 "public: __cdecl CPLJSONArray::CPLJSONArray(class CPLJSONArray &&)" (??0CPLJSONArray@@QEAA@$$QEAV0@@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: class CPLJSONObject & __cdecl CPLJSONObject::operator=(class CPLJSONObject const &)" (??4CPLJSONObject@@QEAAAEAV0@AEBV0@@Z),函数 "public: class CPLJSONArray & __cdecl CPLJSONArray::operator=(class CPLJSONArray &&)" (??4CPLJSONArray@@QEAAAEAV0@$$QEAV0@@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: __cdecl OGR_SRSNode::OGR_SRSNode(char const *)" (??0OGR_SRSNode@@QEAA@PEBD@Z),函数 "public: void __cdecl OGR_SRSNode::`default constructor closure'(void)" (??_FOGR_SRSNode@@QEAAXXZ) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: __cdecl OGRSpatialReference::OGRSpatialReference(char const *)" (??0OGRSpatialReference@@QEAA@PEBD@Z),函数 "public: void __cdecl OGRSpatialReference::`default constructor closure'(void)" (??_FOGRSpatialReference@@QEAAXXZ) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: double __cdecl OGRSpatialReference::GetLinearUnits(char const * *)const " (?GetLinearUnits@OGRSpatialReference@@QEBANPEAPEBD@Z),函数 "public: double __cdecl OGRSpatialReference::GetLinearUnits(std::nullptr_t)const " (?GetLinearUnits@OGRSpatialReference@@QEBAN$$T@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: double __cdecl OGRSpatialReference::GetTargetLinearUnits(char const *,char const * *)const " (?GetTargetLinearUnits@OGRSpatialReference@@QEBANPEBDPEAPEBD@Z),函数 "public: double __cdecl OGRSpatialReference::GetTargetLinearUnits(char const *,std::nullptr_t)const " (?GetTargetLinearUnits@OGRSpatialReference@@QEBANPEBD$$T@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: double __cdecl OGRSpatialReference::GetAngularUnits(char const * *)const " (?GetAngularUnits@OGRSpatialReference@@QEBANPEAPEBD@Z),函数 "public: double __cdecl OGRSpatialReference::GetAngularUnits(std::nullptr_t)const " (?GetAngularUnits@OGRSpatialReference@@QEBAN$$T@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: double __cdecl OGRSpatialReference::GetPrimeMeridian(char const * *)const " (?GetPrimeMeridian@OGRSpatialReference@@QEBANPEAPEBD@Z),函数 "public: double __cdecl OGRSpatialReference::GetPrimeMeridian(std::nullptr_t)const " (?GetPrimeMeridian@OGRSpatialReference@@QEBAN$$T@Z) 中引用了该符号
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultGeometryVisitor::visit(class OGRLineString *)" (?visit@OGRDefaultGeometryVisitor@@UEAAXPEAVOGRLineString@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultGeometryVisitor::visit(class OGRLinearRing *)" (?visit@OGRDefaultGeometryVisitor@@UEAAXPEAVOGRLinearRing@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultGeometryVisitor::visit(class OGRPolygon *)" (?visit@OGRDefaultGeometryVisitor@@UEAAXPEAVOGRPolygon@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultGeometryVisitor::visit(class OGRMultiPoint *)" (?visit@OGRDefaultGeometryVisitor@@UEAAXPEAVOGRMultiPoint@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultGeometryVisitor::visit(class OGRMultiLineString *)" (?visit@OGRDefaultGeometryVisitor@@UEAAXPEAVOGRMultiLineString@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultGeometryVisitor::visit(class OGRMultiPolygon *)" (?visit@OGRDefaultGeometryVisitor@@UEAAXPEAVOGRMultiPolygon@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultGeometryVisitor::visit(class OGRGeometryCollection *)" (?visit@OGRDefaultGeometryVisitor@@UEAAXPEAVOGRGeometryCollection@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultGeometryVisitor::visit(class OGRCircularString *)" (?visit@OGRDefaultGeometryVisitor@@UEAAXPEAVOGRCircularString@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultGeometryVisitor::visit(class OGRCompoundCurve *)" (?visit@OGRDefaultGeometryVisitor@@UEAAXPEAVOGRCompoundCurve@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultGeometryVisitor::visit(class OGRCurvePolygon *)" (?visit@OGRDefaultGeometryVisitor@@UEAAXPEAVOGRCurvePolygon@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultGeometryVisitor::visit(class OGRMultiCurve *)" (?visit@OGRDefaultGeometryVisitor@@UEAAXPEAVOGRMultiCurve@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultGeometryVisitor::visit(class OGRMultiSurface *)" (?visit@OGRDefaultGeometryVisitor@@UEAAXPEAVOGRMultiSurface@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultGeometryVisitor::visit(class OGRTriangle *)" (?visit@OGRDefaultGeometryVisitor@@UEAAXPEAVOGRTriangle@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultGeometryVisitor::visit(class OGRPolyhedralSurface *)" (?visit@OGRDefaultGeometryVisitor@@UEAAXPEAVOGRPolyhedralSurface@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultGeometryVisitor::visit(class OGRTriangulatedSurface *)" (?visit@OGRDefaultGeometryVisitor@@UEAAXPEAVOGRTriangulatedSurface@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultConstGeometryVisitor::visit(class OGRLineString const *)" (?visit@OGRDefaultConstGeometryVisitor@@UEAAXPEBVOGRLineString@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultConstGeometryVisitor::visit(class OGRLinearRing const *)" (?visit@OGRDefaultConstGeometryVisitor@@UEAAXPEBVOGRLinearRing@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultConstGeometryVisitor::visit(class OGRPolygon const *)" (?visit@OGRDefaultConstGeometryVisitor@@UEAAXPEBVOGRPolygon@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultConstGeometryVisitor::visit(class OGRMultiPoint const *)" (?visit@OGRDefaultConstGeometryVisitor@@UEAAXPEBVOGRMultiPoint@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultConstGeometryVisitor::visit(class OGRMultiLineString const *)" (?visit@OGRDefaultConstGeometryVisitor@@UEAAXPEBVOGRMultiLineString@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultConstGeometryVisitor::visit(class OGRMultiPolygon const *)" (?visit@OGRDefaultConstGeometryVisitor@@UEAAXPEBVOGRMultiPolygon@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultConstGeometryVisitor::visit(class OGRGeometryCollection const *)" (?visit@OGRDefaultConstGeometryVisitor@@UEAAXPEBVOGRGeometryCollection@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultConstGeometryVisitor::visit(class OGRCircularString const *)" (?visit@OGRDefaultConstGeometryVisitor@@UEAAXPEBVOGRCircularString@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultConstGeometryVisitor::visit(class OGRCompoundCurve const *)" (?visit@OGRDefaultConstGeometryVisitor@@UEAAXPEBVOGRCompoundCurve@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultConstGeometryVisitor::visit(class OGRCurvePolygon const *)" (?visit@OGRDefaultConstGeometryVisitor@@UEAAXPEBVOGRCurvePolygon@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultConstGeometryVisitor::visit(class OGRMultiCurve const *)" (?visit@OGRDefaultConstGeometryVisitor@@UEAAXPEBVOGRMultiCurve@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultConstGeometryVisitor::visit(class OGRMultiSurface const *)" (?visit@OGRDefaultConstGeometryVisitor@@UEAAXPEBVOGRMultiSurface@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultConstGeometryVisitor::visit(class OGRTriangle const *)" (?visit@OGRDefaultConstGeometryVisitor@@UEAAXPEBVOGRTriangle@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultConstGeometryVisitor::visit(class OGRPolyhedralSurface const *)" (?visit@OGRDefaultConstGeometryVisitor@@UEAAXPEBVOGRPolyhedralSurface@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRDefaultConstGeometryVisitor::visit(class OGRTriangulatedSurface const *)" (?visit@OGRDefaultConstGeometryVisitor@@UEAAXPEBVOGRTriangulatedSurface@@@Z)
geodata.obj : error LNK2019: 无法解析的外部符号 "protected: int __cdecl OGRGeometry::PointOnSurfaceInternal(class OGRPoint *)const " (?PointOnSurfaceInternal@OGRGeometry@@IEBAHPEAVOGRPoint@@@Z),函数 "public: virtual int __cdecl OGRSurface::PointOnSurface(class OGRPoint *)const " (?PointOnSurface@OGRSurface@@UEBAHPEAVOGRPoint@@@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: __cdecl OGRGeometry::OGRGeometry(void)" (??0OGRGeometry@@QEAA@XZ),函数 "public: __cdecl OGRSurface::OGRSurface(void)" (??0OGRSurface@@QEAA@XZ) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: __cdecl OGRGeometry::OGRGeometry(class OGRGeometry const &)" (??0OGRGeometry@@QEAA@AEBV0@@Z),函数 "public: __cdecl OGRSurface::OGRSurface(class OGRSurface &&)" (??0OGRSurface@@QEAA@$$QEAV0@@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: virtual __cdecl OGRGeometry::~OGRGeometry(void)" (??1OGRGeometry@@UEAA@XZ),函数 "public: virtual __cdecl OGRSurface::~OGRSurface(void)" (??1OGRSurface@@UEAA@XZ) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: class OGRGeometry & __cdecl OGRGeometry::operator=(class OGRGeometry const &)" (??4OGRGeometry@@QEAAAEAV0@AEBV0@@Z),函数 "public: class OGRSurface & __cdecl OGRSurface::operator=(class OGRSurface &&)" (??4OGRSurface@@QEAAAEAV0@$$QEAV0@@Z) 中引用了该符号
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual int __cdecl OGRGeometry::getCoordinateDimension(void)const " (?getCoordinateDimension@OGRGeometry@@UEBAHXZ)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual int __cdecl OGRGeometry::IsValid(void)const " (?IsValid@OGRGeometry@@UEBAHXZ)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual class OGRGeometry * __cdecl OGRGeometry::MakeValid(void)const " (?MakeValid@OGRGeometry@@UEBAPEAV1@XZ)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual int __cdecl OGRGeometry::IsSimple(void)const " (?IsSimple@OGRGeometry@@UEBAHXZ)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual int __cdecl OGRGeometry::IsRing(void)const " (?IsRing@OGRGeometry@@UEBAHXZ)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRGeometry::dumpReadable(struct _iobuf *,char const *,char * *)const " (?dumpReadable@OGRGeometry@@UEBAXPEAU_iobuf@@PEBDPEAPEAD@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual char * __cdecl OGRGeometry::exportToGML(char const * const *)const " (?exportToGML@OGRGeometry@@UEBAPEADPEBQEBD@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual char * __cdecl OGRGeometry::exportToKML(void)const " (?exportToKML@OGRGeometry@@UEBAPEADXZ)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual char * __cdecl OGRGeometry::exportToJson(void)const " (?exportToJson@OGRGeometry@@UEBAPEADXZ)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual struct GEOSGeom_t * __cdecl OGRGeometry::exportToGEOS(struct GEOSContextHandle_HS *)const " (?exportToGEOS@OGRGeometry@@UEBAPEAUGEOSGeom_t@@PEAUGEOSContextHandle_HS@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual int __cdecl OGRGeometry::hasCurveGeometry(int)const " (?hasCurveGeometry@OGRGeometry@@UEBAHH@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual class OGRGeometry * __cdecl OGRGeometry::getCurveGeometry(char const * const *)const " (?getCurveGeometry@OGRGeometry@@UEBAPEAV1@PEBQEBD@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual class OGRGeometry * __cdecl OGRGeometry::getLinearGeometry(double,char const * const *)const " (?getLinearGeometry@OGRGeometry@@UEBAPEAV1@NPEBQEBD@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRGeometry::closeRings(void)" (?closeRings@OGRGeometry@@UEAAXXZ)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRGeometry::setCoordinateDimension(int)" (?setCoordinateDimension@OGRGeometry@@UEAAXH@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRGeometry::set3D(int)" (?set3D@OGRGeometry@@UEAAXH@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRGeometry::setMeasured(int)" (?setMeasured@OGRGeometry@@UEAAXH@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRGeometry::assignSpatialReference(class OGRSpatialReference *)" (?assignSpatialReference@OGRGeometry@@UEAAXPEAVOGRSpatialReference@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRGeometry::segmentize(double)" (?segmentize@OGRGeometry@@UEAAXN@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual int __cdecl OGRGeometry::Intersects(class OGRGeometry const *)const " (?Intersects@OGRGeometry@@UEBAHPEBV1@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual int __cdecl OGRGeometry::Disjoint(class OGRGeometry const *)const " (?Disjoint@OGRGeometry@@UEBAHPEBV1@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual int __cdecl OGRGeometry::Touches(class OGRGeometry const *)const " (?Touches@OGRGeometry@@UEBAHPEBV1@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual int __cdecl OGRGeometry::Crosses(class OGRGeometry const *)const " (?Crosses@OGRGeometry@@UEBAHPEBV1@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual int __cdecl OGRGeometry::Within(class OGRGeometry const *)const " (?Within@OGRGeometry@@UEBAHPEBV1@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual int __cdecl OGRGeometry::Contains(class OGRGeometry const *)const " (?Contains@OGRGeometry@@UEBAHPEBV1@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual int __cdecl OGRGeometry::Overlaps(class OGRGeometry const *)const " (?Overlaps@OGRGeometry@@UEBAHPEBV1@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual class OGRGeometry * __cdecl OGRGeometry::Boundary(void)const " (?Boundary@OGRGeometry@@UEBAPEAV1@XZ)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual double __cdecl OGRGeometry::Distance(class OGRGeometry const *)const " (?Distance@OGRGeometry@@UEBANPEBV1@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual class OGRGeometry * __cdecl OGRGeometry::ConvexHull(void)const " (?ConvexHull@OGRGeometry@@UEBAPEAV1@XZ)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual class OGRGeometry * __cdecl OGRGeometry::Buffer(double,int)const " (?Buffer@OGRGeometry@@UEBAPEAV1@NH@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual class OGRGeometry * __cdecl OGRGeometry::Intersection(class OGRGeometry const *)const " (?Intersection@OGRGeometry@@UEBAPEAV1@PEBV1@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual class OGRGeometry * __cdecl OGRGeometry::Union(class OGRGeometry const *)const " (?Union@OGRGeometry@@UEBAPEAV1@PEBV1@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual class OGRGeometry * __cdecl OGRGeometry::UnionCascaded(void)const " (?UnionCascaded@OGRGeometry@@UEBAPEAV1@XZ)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual class OGRGeometry * __cdecl OGRGeometry::Difference(class OGRGeometry const *)const " (?Difference@OGRGeometry@@UEBAPEAV1@PEBV1@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual class OGRGeometry * __cdecl OGRGeometry::SymDifference(class OGRGeometry const *)const " (?SymDifference@OGRGeometry@@UEBAPEAV1@PEBV1@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual int __cdecl OGRGeometry::Centroid(class OGRPoint *)const " (?Centroid@OGRGeometry@@UEBAHPEAVOGRPoint@@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual class OGRGeometry * __cdecl OGRGeometry::Simplify(double)const " (?Simplify@OGRGeometry@@UEBAPEAV1@N@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual class OGRGeometry * __cdecl OGRGeometry::DelaunayTriangulation(double,int)const " (?DelaunayTriangulation@OGRGeometry@@UEBAPEAV1@NH@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual class OGRGeometry * __cdecl OGRGeometry::Polygonize(void)const " (?Polygonize@OGRGeometry@@UEBAPEAV1@XZ)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual double __cdecl OGRGeometry::Distance3D(class OGRGeometry const *)const " (?Distance3D@OGRGeometry@@UEBANPEBV1@@Z)
geodata.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl OGRGeometry::swapXY(void)" (?swapXY@OGRGeometry@@UEAAXXZ)
geodata.obj : error LNK2019: 无法解析的外部符号 "public: virtual __cdecl OGRPointIterator::~OGRPointIterator(void)" (??1OGRPointIterator@@UEAA@XZ),函数 "public: virtual void * __cdecl OGRPointIterator::`vector deleting destructor'(unsigned int)" (??_EOGRPointIterator@@UEAAPEAXI@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: static int __cdecl OGRGeometryFactory::createFromWkt(char const * *,class OGRSpatialReference *,class OGRGeometry * *)" (?createFromWkt@OGRGeometryFactory@@SAHPEAPEBDPEAVOGRSpatialReference@@PEAPEAVOGRGeometry@@@Z),函数 "public: static int __cdecl OGRGeometryFactory::createFromWkt(char * *,class OGRSpatialReference *,class OGRGeometry * *)" (?createFromWkt@OGRGeometryFactory@@SAHPEAPEADPEAVOGRSpatialReference@@PEAPEAVOGRGeometry@@@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: __cdecl OGRFeatureDefn::OGRFeatureDefn(char const *)" (??0OGRFeatureDefn@@QEAA@PEBD@Z),函数 "public: void __cdecl OGRFeatureDefn::`default constructor closure'(void)" (??_FOGRFeatureDefn@@QEAAXXZ) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: void __cdecl OGRFeature::FieldValue::clear(void)" (?clear@FieldValue@OGRFeature@@QEAAXXZ),函数 "public: void __cdecl OGRFeature::FieldValue::Unset(void)" (?Unset@FieldValue@OGRFeature@@QEAAXXZ) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: class OGRFieldDefn const * __cdecl OGRFeature::FieldValue::GetDefn(void)const " (?GetDefn@FieldValue@OGRFeature@@QEBAPEBVOGRFieldDefn@@XZ),函数 "public: char const * __cdecl OGRFeature::FieldValue::GetName(void)const " (?GetName@FieldValue@OGRFeature@@QEBAPEBDXZ) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: bool __cdecl OGRFeature::FieldValue::IsUnset(void)const " (?IsUnset@FieldValue@OGRFeature@@QEBA_NXZ),函数 "public: bool __cdecl OGRFeature::FieldValue::empty(void)const " (?empty@FieldValue@OGRFeature@@QEBA_NXZ) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: union OGRField const * __cdecl OGRFeature::FieldValue::GetRawValue(void)const " (?GetRawValue@FieldValue@OGRFeature@@QEBAPEBTOGRField@@XZ),函数 "public: double __cdecl OGRFeature::FieldValue::GetDouble(void)const " (?GetDouble@FieldValue@OGRFeature@@QEBANXZ) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: int __cdecl OGRFeature::FieldValue::GetAsInteger(void)const " (?GetAsInteger@FieldValue@OGRFeature@@QEBAHXZ) ,函数 "public: __cdecl OGRFeature::FieldValue::operator int(void)const " (??BFieldValue@OGRFeature@@QEBAHXZ) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: __int64 __cdecl OGRFeature::FieldValue::GetAsInteger64(void)const " (?GetAsInteger64@FieldValue@OGRFeature@@QEBA_JXZ),函数 "public: __cdecl OGRFeature::FieldValue::operator __int64(void)const " (??BFieldValue@OGRFeature@@QEBA_JXZ) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: double __cdecl OGRFeature::FieldValue::GetAsDouble(void)const " (?GetAsDouble@FieldValue@OGRFeature@@QEBANXZ),函数 "public: __cdecl OGRFeature::FieldValue::operator double(void)const " (??BFieldValue@OGRFeature@@QEBANXZ) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: char const * __cdecl OGRFeature::FieldValue::GetAsString(void)const " (?GetAsString@FieldValue@OGRFeature@@QEBAPEBDXZ),函数 "public: __cdecl OGRFeature::FieldValue::operator char const *(void)const " (??BFieldValue@OGRFeature@@QEBAPEBDXZ) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: class std::vector<int,class std::allocator<int> > const & __cdecl OGRFeature::FieldValue::GetAsIntegerList(void)const " (?GetAsIntegerList@FieldValue@OGRFeature@@QEBAAEBV?$vector@HV?$allocator@H@std@@@std@@XZ),函数 "public: __cdecl OGRFeature::FieldValue::operator class std::vector<int,class std::allocator<int> > const &(void)const " (??BFieldValue@OGRFeature@@QEBAAEBV?$vector@HV?$allocator@H@std@@@std@@XZ) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: class std::vector<__int64,class std::allocator<__int64> > const & __cdecl OGRFeature::FieldValue::GetAsInteger64List(void)const " (?GetAsInteger64List@FieldValue@OGRFeature@@QEBAAEBV?$vector@_JV?$allocator@_J@std@@@std@@XZ),函数 "public: __cdecl OGRFeature::FieldValue::operator class std::vector<__int64,class std::allocator<__int64> > const &(void)const " (??BFieldValue@OGRFeature@@QEBAAEBV?$vector@_JV?$allocator@_J@std@@@std@@XZ) 中引 用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: class std::vector<double,class std::allocator<double> > const & __cdecl OGRFeature::FieldValue::GetAsDoubleList(void)const " (?GetAsDoubleList@FieldValue@OGRFeature@@QEBAAEBV?$vector@NV?$allocator@N@std@@@std@@XZ),函数 "public: __cdecl OGRFeature::FieldValue::operator class std::vector<double,class std::allocator<double> > const &(void)const " (??BFieldValue@OGRFeature@@QEBAAEBV?$vector@NV?$allocator@N@std@@@std@@XZ) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: class std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > const & __cdecl OGRFeature::FieldValue::GetAsStringList(void)const " (?GetAsStringList@FieldValue@OGRFeature@@QEBAAEBV?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@XZ),函数 "public: __cdecl OGRFeature::FieldValue::operator class std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > const &(void)const " (??BFieldValue@OGRFeature@@QEBAAEBV?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@XZ) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: int __cdecl OGRFeature::GetFieldAsInteger(int)const " (?GetFieldAsInteger@OGRFeature@@QEBAHH@Z),函数 "public: int __cdecl OGRFeature::GetFieldAsInteger(char const *)const " (?GetFieldAsInteger@OGRFeature@@QEBAHPEBD@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: __int64 __cdecl OGRFeature::GetFieldAsInteger64(int)const " (?GetFieldAsInteger64@OGRFeature@@QEBA_JH@Z),函 数 "public: __int64 __cdecl OGRFeature::GetFieldAsInteger64(char const *)const " (?GetFieldAsInteger64@OGRFeature@@QEBA_JPEBD@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: double __cdecl OGRFeature::GetFieldAsDouble(int)const " (?GetFieldAsDouble@OGRFeature@@QEBANH@Z),函数 "public: double __cdecl OGRFeature::GetFieldAsDouble(char const *)const " (?GetFieldAsDouble@OGRFeature@@QEBANPEBD@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: char const * __cdecl OGRFeature::GetFieldAsString(int)const " (?GetFieldAsString@OGRFeature@@QEBAPEBDH@Z),函数 "public: char const * __cdecl OGRFeature::GetFieldAsString(char const *)const " (?GetFieldAsString@OGRFeature@@QEBAPEBDPEBD@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: int const * __cdecl OGRFeature::GetFieldAsIntegerList(int,int *)const " (?GetFieldAsIntegerList@OGRFeature@@QEBAPEBHHPEAH@Z),函数 "public: int const * __cdecl OGRFeature::GetFieldAsIntegerList(char const *,int *)const " (?GetFieldAsIntegerList@OGRFeature@@QEBAPEBHPEBDPEAH@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: __int64 const * __cdecl OGRFeature::GetFieldAsInteger64List(int,int *)const " (?GetFieldAsInteger64List@OGRFeature@@QEBAPEB_JHPEAH@Z),函数 "public: __int64 const * __cdecl OGRFeature::GetFieldAsInteger64List(char const *,int *)const " (?GetFieldAsInteger64List@OGRFeature@@QEBAPEB_JPEBDPEAH@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: double const * __cdecl OGRFeature::GetFieldAsDoubleList(int,int *)const " (?GetFieldAsDoubleList@OGRFeature@@QEBAPEBNHPEAH@Z),函数 "public: double const * __cdecl OGRFeature::GetFieldAsDoubleList(char const *,int *)const " (?GetFieldAsDoubleList@OGRFeature@@QEBAPEBNPEBDPEAH@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: char * * __cdecl OGRFeature::GetFieldAsStringList(int)const " (?GetFieldAsStringList@OGRFeature@@QEBAPEAPEADH@Z),函数 "public: char * * __cdecl OGRFeature::GetFieldAsStringList(char const *)const " (?GetFieldAsStringList@OGRFeature@@QEBAPEAPEADPEBD@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: void __cdecl OGRFeature::SetField(int,int)" (?SetField@OGRFeature@@QEAAXHH@Z),函数 "public: void __cdecl OGRFeature::SetField(char const *,int)" (?SetField@OGRFeature@@QEAAXPEBDH@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: void __cdecl OGRFeature::SetField(int,__int64)" (?SetField@OGRFeature@@QEAAXH_J@Z),函数 "public: void __cdecl OGRFeature::SetField(char const *,__int64)" (?SetField@OGRFeature@@QEAAXPEBD_J@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: void __cdecl OGRFeature::SetField(int,double)" (?SetField@OGRFeature@@QEAAXHN@Z),函数 "public: void __cdecl OGRFeature::SetField(char const *,double)" (?SetField@OGRFeature@@QEAAXPEBDN@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: void __cdecl OGRFeature::SetField(int,char const *)" (?SetField@OGRFeature@@QEAAXHPEBD@Z),函数 "public: void __cdecl OGRFeature::SetField(char const *,char const *)" (?SetField@OGRFeature@@QEAAXPEBD0@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: void __cdecl OGRFeature::SetField(int,int,int const *)" (?SetField@OGRFeature@@QEAAXHHPEBH@Z),函数 "public: void __cdecl OGRFeature::SetField(char const *,int,int const *)" (?SetField@OGRFeature@@QEAAXPEBDHPEBH@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: void __cdecl OGRFeature::SetField(int,int,__int64 const *)" (?SetField@OGRFeature@@QEAAXHHPEB_J@Z),函数 "public: void __cdecl OGRFeature::SetField(char const *,int,__int64 const *)" (?SetField@OGRFeature@@QEAAXPEBDHPEB_J@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: void __cdecl OGRFeature::SetField(int,int,double const *)" (?SetField@OGRFeature@@QEAAXHHPEBN@Z),函数 "public: void __cdecl OGRFeature::SetField(char const *,int,double const *)" (?SetField@OGRFeature@@QEAAXPEBDHPEBN@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: void __cdecl OGRFeature::SetField(int,char const * const *)" (?SetField@OGRFeature@@QEAAXHPEBQEBD@Z),函数 "public: void __cdecl OGRFeature::SetField(char const *,char const * const *)" (?SetField@OGRFeature@@QEAAXPEBDPEBQEBD@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: void __cdecl OGRFeature::SetField(int,union OGRField *)" (?SetField@OGRFeature@@QEAAXHPEATOGRField@@@Z),函数 "public: void __cdecl OGRFeature::SetField(char const *,union OGRField *)" (?SetField@OGRFeature@@QEAAXPEBDPEATOGRField@@@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: void __cdecl OGRFeature::SetField(int,int,int,int,int,int,float,int)" (?SetField@OGRFeature@@QEAAXHHHHHHMH@Z),函数 "public: void __cdecl OGRFeature::SetField(char const *,int,int,int,int,int,float,int)" (?SetField@OGRFeature@@QEAAXPEBDHHHHHMH@Z) 中引用了该符号
geodata.obj : error LNK2019: 无法解析的外部符号 "public: __cdecl GDALColorTable::GDALColorTable(enum GDALPaletteInterp)" (??0GDALColorTable@@QEAA@W4GDALPaletteInterp@@@Z),函数 "public: void __cdecl GDALColorTable::`default constructor closure'(void)" (??_FGDALColorTable@@QEAAXXZ) 中引用了该符号
demo\addons\geodot\win64\libgeodot.dll : fatal error LNK1120: 159 个无法解析的外部命令
scons: *** [demo\addons\geodot\win64\libgeodot.dll] Error 1120
scons: building terminated because of errors.
For this issue we'll look at street data since it's relatively simple - more complex polygons will come later.
GDAL offers a lot of functionality for vector data. (https://gdal.org/api/ogrgeometry_cpp.html) We want to build a similar pipeline as with raster data for vectors:
GDAL <- Vector module (GDAL wrapper class) <- Geodot (Godot-compatible class)
Our street data seems to be a MultiLineString. We'll want to extract lines from it based on a position and a radius. In Godot, multiple types as a result make sense: PoolVector2/3Array, Curve(3D), Path.
Not sure this is useful but could we log (add debug switch) some internal state?
I did a simple test printing path.
Is there info useful for debugging provided data sources, fields, etc or are there better data validation tools?
(base) Clemenss-MacBook-Pro:geodot-plugin clemens$ git diff
diff --git a/src/geodot.cpp b/src/geodot.cpp
index acc61cc..6b26e57 100644
--- a/src/geodot.cpp
+++ b/src/geodot.cpp
@@ -24,6 +24,7 @@ Ref<GeoDataset> Geodot::get_dataset(String path) {
Ref<GeoDataset> dataset;
dataset.instance();
+ std::cout << "Using file: " << path.utf8().get_data() << std::endl;
dataset->load_from_file(path);
return dataset;
This could be done in the Github wiki here
For example, when the filename is invalid, the entire Godot game crashes. The error message is only in the log of the engine (not visible in the editor). It would be ideal if we could throw a proper Godot error in such a case.
For example:
If a tile of LOD 21 is requested, but only tiles of up to LOD 20 are available, the corresponding quarter of the tile at LOD 20 should be cropped and returned.
If a tile of LOD 22 is requested in this example, the cropping should be done twice, recursively.
Currently we take a detour over the disk since we save images, and then load them again in Godot. If possible, it would be great if we could directly return the image from GDAL to Godot in RAM.
2020-05-24_01-35-08-427 [ERR ] [main] Phytocoenosis CSV file does not exist, expected it at vegetation/phytocoenosis.csv
ERROR: Geodot::get_image: No valid data was available for the requested path and position!
At: geodot.cpp:26.
ERROR: Geodot::get_image: No valid data was available for the requested path and position!
At: geodot.cpp:26.
handle_crash: Program crashed with signal 11
Dumping the backtrace. Please include this when reporting the bug on https://github.com/godotengine/godot/issues
[1] /lib/x86_64-linux-gnu/libc.so.6(+0x46210) [0x7f36193af210] (??:0)
[2] GeoRaster::get_as_array() (??:0)
[3] GeoRaster::get_histogram() (??:0)
[4] GeoRaster::get_most_common(int) (??:0)
[5] godot::GeoImage::get_most_common(int) (??:0)
[6] godot_variant godot::__wrapped_method<godot::GeoImage, godot::Array, int>(void*, void*, void*, int, godot_variant**) (??:0)
[7] ../Godot_v3.2.1-stable_x11.64() [0x25cab97] (<artificial>:?)
Similarly to the current LineString functionality, Points and MultiPoints should be supported and cast into a new GeoPoint for Godot.
We're still not quite sure what exactly is causing it, but there can be crashes on Windows in very specific circumstances. It is apparently related to loading new (non-cached) GeoImages from multiple threads. Here are some of our observations while testing in LandscapeLab:
In 2419613, rigorous mutexes were added anytime a new resource is created or loaded. Interestingly, this did not fix the crashes, although they did seem to get less frequent.
With these mutexes and the cache, the creation of the GeoImage (loading GeoRaster, reading as array, etc) is actually non-threaded. That's why this behavior is really strange... I can't think of any situation where our two threads actually do something in parallel without a mutex, aside from GeoImage.get_image() and GeoImage.get_image_texture(). However, even those functions use a mutex internally.
This crash has never been observed on Linux, while it's pretty frequent on Windows (always happened within ~5 times of loading terrain up to a high LOD). So I'd say the issue is either related to GDAL on Windows, or to our compilation on Windows (which uses Visual C++, not g++).
There is no error message at all, the window simply closes.
We can currently work around this issue by using two copies of the same heightmap, one in the TerrainModule and one in the TerrainColliderModule. While this works, it's not very clean, so it would be good to figure out exactly what's going on.
(related to #10)
Currently, these are only empty implementations. They should be implemented so that it can always be checked whether it is possible to call functions on an object (e.g. a database or an image), so that errors can be avoided. Examples of invalid states: Database with invalid path; image with no data (due to position outside of data range); layer with invalid name.
Right click release makes scene jump back and more weird mouse rotations
We should add FPS player instead.
/Applications/Godot.app
demo
directorydemo
directory the scene GeopackageDemo.tscn
./Applications/Godot.app/Contents/MacOS/Godot GeopackageDemo.tscn
/Applications/Godot_mono.app/Contents/MacOS/Godot GeopackageDemo.tscn
This is from Godot_v3.2.4-rc1_osx.universal.app
...
Registered camera FaceTime HD Camera (Display) with id 5 position 0 at index 4
- 'VirtualXPath' [XML Path Language - XPath]
handle_crash: Program crashed with signal 11
ERROR: notification: NativeScriptInstance detected crash on method: get_dataset
At: modules/gdnative/nativescript/nativescript.cpp:749.
Dumping the backtrace. Please include this when reporting the bug on https://github.com/godotengine/godot/issues
[1] 1 libsystem_platform.dylib 0x00007fff203abd7d _sigtramp + 29
[2] 2 ??? 0x0000000114801080 0x0 + 4638904448
[3] 3 libsqlite3.0.dylib 0x000000012b3996c7 sqlite3VdbeMemSetStr + 109
[4] 4 libsqlite3.0.dylib 0x000000012b3e0e27 sqlite3Select + 992
[5] 5 libsqlite3.0.dylib 0x000000012b3d7f25 yy_reduce + 3218
[6] 6 libsqlite3.0.dylib 0x000000012b39fc5d sqlite3RunParser + 720
[7] 7 libsqlite3.0.dylib 0x000000012b3d2c04 sqlite3Prepare + 380
[8] 8 libsqlite3.0.dylib 0x000000012b39ef9f sqlite3LockAndPrepare + 176
[9] 9 libsqlite3.0.dylib 0x000000012b39e2e2 sqlite3_exec + 176
[10] 10 libsqlite3.0.dylib 0x000000012b39f33a sqlite3_get_table + 209
[11] SQLQuery(sqlite3*, char const*, SQLResult*)
[12] GDALGeoPackageDataset::Open(GDALOpenInfo*)
[13] OGRGeoPackageDriverOpen(GDALOpenInfo*)
[14] 14 libgdal.28.dylib 0x0000000129278f92 GDALOpenEx + 1690
[15] NativeDataset::NativeDataset(char const*)
[16] NativeDataset::NativeDataset(char const*)
[17] VectorExtractor::open_dataset(char const*)
[18] godot::GeoDataset::load_from_file(godot::String)
[19] godot::Geodot::get_dataset(godot::String)
...
In https://github.com/godotengine/godot/blob/master/SConstruct#L630 they use
# Build subdirs, the build order is dependent on link order.
SConscript("core/SCsub")
could we use?
# Build the extractor libraries
SConscript("src/raster-tile-extractor/SConstruct")
SConscript("src/vector-extractor/SConstruct")
and would that make the build cleaner?
See also https://scons.org/doc/production/HTML/scons-user.html#chap-hierarchical
A typical use case of the GeoImage is to hold a heightmap. For such a heightmap, it is often requried to also get the corresponding normal map. We want to add this functionality.
Godot offers a method to turn a bump map into a normal map: Image::bumpmap_to_normalmap
in https://github.com/godotengine/godot/blob/master/core/image.cpp. However, the normals created with this method are not very good looking. We might want to implement a custom method for this. If it works well, we could suggest merging this back into Godot and just calling that function here.
We've previously used this code for getting the normal in a shader and the results were good:
vec3 get_normal(vec2 normal_uv_pos) {
// To calculate the normal vector, height values on the left/right/top/bottom of the current pixel are compared.
// e is the offset factor.
float texture_size = float(textureSize(heightmap, 0).x);
float e = ((size / size_without_skirt) / texture_size);
// Sobel filter for getting the normal at this position
float bottom_left = get_height_no_falloff(normal_uv_pos + vec2(-e, -e));
float bottom_center = get_height_no_falloff(normal_uv_pos + vec2(0, -e));
float bottom_right = get_height_no_falloff(normal_uv_pos + vec2(e, -e));
float center_left = get_height_no_falloff(normal_uv_pos + vec2(-e, 0));
float center_center = get_height_no_falloff(normal_uv_pos + vec2(0, 0));
float center_right = get_height_no_falloff(normal_uv_pos + vec2(e, 0));
float top_left = get_height_no_falloff(normal_uv_pos + vec2(-e, e));
float top_center = get_height_no_falloff(normal_uv_pos + vec2(0, e));
float top_right = get_height_no_falloff(normal_uv_pos + vec2(e, e));
vec3 long_normal;
long_normal.x = -(bottom_right - bottom_left + 2.0 * (center_right - center_left) + top_right - top_left) / (size_without_skirt / texture_size);
long_normal.y = (top_left - bottom_left + 2.0 * (top_center - bottom_center) + top_right - bottom_right) / (size_without_skirt / texture_size);
long_normal.z = 1.0;
return normalize(long_normal);
}
Maybe we can do something similar here.
Some function naming should maybe also be reconsidered for consistency and clarity.
see discord and remarks in 34a3c49
I could successfully run the demo. I also had some success with a custom geotiff file.
However the area I want to render is not a square (1242x648) and if I modify the demo code to try to display the full image I get an error like this:
$ godot .
Godot Engine v3.3.stable.arch_linux - https://godotengine.org
OpenGL ES 3.0 Renderer: AMD RENOIR (DRM 3.40.0, 5.11.16-zen1-1-zen, LLVM 11.1.0)
OpenGL ES Batching: ON
ERROR 5: out1.tif, band 1: Access window out of range in RasterIO(). Requested
(0,-594) of size 647x647 on raster of 1242x648.
ERROR 5: out1.tif, band 2: Access window out of range in RasterIO(). Requested
(0,-594) of size 647x647 on raster of 1242x648.
ERROR 5: out1.tif, band 3: Access window out of range in RasterIO(). Requested
(0,-594) of size 647x647 on raster of 1242x648.
ERROR 5: out1.tif, band 4: Access window out of range in RasterIO(). Requested
(0,-594) of size 647x647 on raster of 1242x648.
ERROR: create_from_image: Invalid image
At: scene/resources/texture.cpp:199.
^C
Is there any support for non-square image?
info about the geotiff:
gdalinfo out1.tif
Driver: GTiff/GeoTIFF
Files: out1.tif
Size is 1242, 648
Coordinate System is:
PROJCRS["WGS 84 / Pseudo-Mercator",
BASEGEOGCRS["WGS 84",
ENSEMBLE["World Geodetic System 1984 ensemble",
MEMBER["World Geodetic System 1984 (Transit)"],
MEMBER["World Geodetic System 1984 (G730)"],
MEMBER["World Geodetic System 1984 (G873)"],
MEMBER["World Geodetic System 1984 (G1150)"],
MEMBER["World Geodetic System 1984 (G1674)"],
MEMBER["World Geodetic System 1984 (G1762)"],
ELLIPSOID["WGS 84",6378137,298.257223563,
LENGTHUNIT["metre",1]],
ENSEMBLEACCURACY[2.0]],
PRIMEM["Greenwich",0,
ANGLEUNIT["degree",0.0174532925199433]],
ID["EPSG",4326]],
CONVERSION["Popular Visualisation Pseudo-Mercator",
METHOD["Popular Visualisation Pseudo Mercator",
ID["EPSG",1024]],
PARAMETER["Latitude of natural origin",0,
ANGLEUNIT["degree",0.0174532925199433],
ID["EPSG",8801]],
PARAMETER["Longitude of natural origin",0,
ANGLEUNIT["degree",0.0174532925199433],
ID["EPSG",8802]],
PARAMETER["False easting",0,
LENGTHUNIT["metre",1],
ID["EPSG",8806]],
PARAMETER["False northing",0,
LENGTHUNIT["metre",1],
ID["EPSG",8807]]],
CS[Cartesian,2],
AXIS["easting (X)",east,
ORDER[1],
LENGTHUNIT["metre",1]],
AXIS["northing (Y)",north,
ORDER[2],
LENGTHUNIT["metre",1]],
USAGE[
SCOPE["Web mapping and visualisation."],
AREA["World between 85.06°S and 85.06°N."],
BBOX[-85.06,-180,85.06,180]],
ID["EPSG",3857]]
Data axis to CRS axis mapping: 1,2
Origin = (15208294.336400000378489,4159389.058000000193715)
Pixel Size = (1.000020450885421,-0.999814506173191)
Metadata:
AREA_OR_POINT=Area
Image Structure Metadata:
COMPRESSION=PACKBITS
INTERLEAVE=PIXEL
Corner Coordinates:
Upper Left (15208294.336, 4159389.058) (136d37' 6.36"E, 34d58' 0.98"N)
Lower Left (15208294.336, 4158741.178) (136d37' 6.36"E, 34d57'43.81"N)
Upper Right (15209536.362, 4159389.058) (136d37'46.52"E, 34d58' 0.98"N)
Lower Right (15209536.362, 4158741.178) (136d37'46.52"E, 34d57'43.81"N)
Center (15208915.349, 4159065.118) (136d37'26.44"E, 34d57'52.39"N)
Band 1 Block=1242x1 Type=Byte, ColorInterp=Red
Mask Flags: PER_DATASET ALPHA
Band 2 Block=1242x1 Type=Byte, ColorInterp=Green
Mask Flags: PER_DATASET ALPHA
Band 3 Block=1242x1 Type=Byte, ColorInterp=Blue
Mask Flags: PER_DATASET ALPHA
Band 4 Block=1242x1 Type=Byte, ColorInterp=Alpha
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.